简体   繁体   English

SQL Server拆分日,分为2个小时的4个块

[英]SQL Server Split Day in 4 Blocks of 2 hours

I have few records of tasks with StartTime and StopTime and I would like to split it in 4 records of 2 hours (8:30 - 10:30 / 10:30 - 12:30 / 13:00 - 15:00 / 15:00 - 17:00) Typically, i would like to split this row : 我的StartTime和StopTime任务记录很少,我想将其分为4小时的2小时记录(8:30-10:30 / 10:30-12:30 / 13:00-15:00 / 15: 00-17:00)通常,我想分割此行:

From
Title StartTime            StopTime
Task1 2013-11-12 09:00     2013-11-12 14:00
To
Title StartTime            StopTime
Task1 2013-11-12 09:30     2013-11-12 10:30
Task1 2013-11-12 10:30     2013-11-12 12:30
Task1 2013-11-12 12:30     2013-11-12 14:00

Any suggestion is welcome, thanks. 任何建议都值得欢迎,谢谢。

Try this query: 试试这个查询:

SQLFiddle demo SQLFiddle演示

select [TaskName],
       CASE WHEN CONVERT(varchar,StartTime,108)<pStart
       THEN floor(CAST(StartTime as float))+Cast(pStart as Datetime)
       ELSE StartTime
       END as StartTime,
       CASE WHEN CONVERT(varchar,StopTime,108)>pEnd
       THEN floor(CAST(StopTime as float))+Cast(pEnd as Datetime)
       ELSE StopTime
       END as StopTime

FROM T       

JOIN 
(
  SELECT '08:30:00' as pStart, '10:30:00' as pEnd 
  UNION ALL
  SELECT '10:30:00' as pStart, '12:30:00' as pEnd
  UNION ALL
  SELECT '13:00:00' as pStart, '15:00:00' as pEnd  
  UNION ALL
  SELECT '15:00:00' as pStart, '17:00:00' as pEnd  
)  as DayParts 
  ON (CONVERT(varchar,StartTime,108)<=pEnd 
       AND 
      CONVERT(varchar,StopTime,108)>=pEnd
     ) 
     OR 
     (
      CONVERT(varchar,StopTime,108)>=pStart
       AND 
      CONVERT(varchar,StartTime,108)<=pStart   
     )  

ORDER BY TaskName,StartTime

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM