Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server中的时间中断_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 SQL Server中的时间中断

Sql server 2008 SQL Server中的时间中断,sql-server-2008,tsql,Sql Server 2008,Tsql,我有一个有趣的挑战,在我的应用程序中有一些时间数据。我有一张开始和结束时间表;并且需要减去保持差异的换班时间,以获得多行。我现在正试图在我的SQLServer2008盒子上实现这一点 我的想法是如果我有一个像 Start 09:00 End 19:12 班次显示09:00->17:00我需要将数据分成两行 Start 09:00 End 17:00 Start 17:00 End 19:12 这也需要在午夜工作;创建了一些scratch数据,因为我一直在玩弄一些想法,但我想知道是否有办法摆脱

我有一个有趣的挑战,在我的应用程序中有一些时间数据。我有一张开始和结束时间表;并且需要减去保持差异的换班时间,以获得多行。我现在正试图在我的SQLServer2008盒子上实现这一点

我的想法是如果我有一个像

Start 09:00 End 19:12
班次显示09:00->17:00我需要将数据分成两行

Start 09:00 End 17:00
Start 17:00 End 19:12
这也需要在午夜工作;创建了一些scratch数据,因为我一直在玩弄一些想法,但我想知道是否有办法摆脱这种情况

Create Table dbo.tblClockEvents
(
DayOfWeek Int,
ClockOn Time,
ClockOff Time
)

Create Table dbo.tblShiftPattern
(
DayOfWeek Int,
StartTime Time,
EndTime Time
)

insert into dbo.tblShiftPattern
select 1, '07:30', '17:00'
union select 2, '09:30', '18:00'
union select 3, '09:30', '18:00'
union select 4, '09:30', '18:00'
union select 5, '20:30', '04:00'


insert into dbo.tblClockEvents
select 1, '07:30', '17:00'
union select 2, '09:22', '18:14'
union select 3, '09:12', '18:01'
union select 4, '09:22', '18:14'
union select 5, '20:22', '04:14'

Select * 
from dbo.tblClockEvents aa
inner join tblShiftPattern bb
on  aa.DayOfWeek = bb.DayOfWeek


@rs。谢谢。应该在1点3分前订购。我更新了答案这是一个如此简单的解决方案。非常感谢您的回答:)@rs。谢谢。应该在1点3分前订购。我更新了答案这是一个如此简单的解决方案。非常感谢您的回答:)
    WITH cte AS
(
  SELECT aa.*,bb.StartTime,bb.EndTime
  FROM dbo.tblClockEvents aa
  INNER JOIN tblShiftPattern bb
  ON  aa.DayOfWeek = bb.DayOfWeek
 )
SELECT DayOfWeek,ClockOn as [start],
CASE WHEN EndTime > ClockOff THEN ClockOff ELSE EndTime END AS [end]
FROM cte
UNION ALL
SELECT DayOfWeek,EndTime,ClockOff
FROM cte
WHERE ClockOff>EndTime
ORDER BY 1,3