How to create a specific SQL Server stored procedure? [closed]

Yet another option.

Not sure if I agree with the last record of the desired results. I have 2019-01-07 while you have 2019-01-08

Example or dbFiddle

Select A.[Name]
      ,[Begin_Date] = convert(datetime,left(dateadd(DAY,N       ,[Begin_date]),10)+' '+BegTime)
      ,[End_Date]   = convert(datetime,left(dateadd(DAY,N+NxtDay,[Begin_date]),10)+' '+EndTime)
 From  YourTable A
 Cross Apply ( values ( left(replicate(Schedule,10),datediff(DAY,Begin_Date,End_Date)) ) )B(S)
 Cross Apply ( 
               Select N=N-1
                     ,Subs=substring(B.S,N,1)
                 From (  Select Top (len(S)+1) N=Row_Number() Over (Order By (Select Null)) From  master..spt_values n1 ) B1
             ) C
 Join ( values ('m','08:00','20:00',0)
              ,('n','20:00','08:00',1)
              ,('d','08:00','08:00',1)
      ) D(SchdCd,BegTime,EndTime,NxtDay) on Subs=SchdCd
 Order By [Begin_Date]

Results

Name    Begin_Date                  End_Date
John    2019-01-01 20:00:00.000     2019-01-02 08:00:00.000
John    2019-01-03 08:00:00.000     2019-01-03 20:00:00.000
John    2019-01-05 20:00:00.000     2019-01-06 08:00:00.000
John    2019-01-07 08:00:00.000     2019-01-07 20:00:00.000

Leave a Comment