30是30分钟的插槽
从date
todate时时间
WITH Daterange
AS (
SELECT (CONVERT(datetime,'20240101' ,114)) as MyDate
UNION ALL
SELECT DATEADD(DAY, 1, MyDate)
FROM DateGenerate
WHERE MyDate < (CONVERT(datetime,'20240105' ,114))
)
SELECT MyDate, 45, 804000, 1203000 FROM Daterange
union all
select DEFSLOT, 0, fromtime, Totime FROM Slottable
这是我的尝试
测试数据略有更改。
fromdate -starttime20240101 | 8000000 | 30 | ||
---|---|---|---|---|
20240102 | 8000000 | 30 | 9 | |
8000000 | 30 | 9 | 20240104 | |
30 | 9 | 在“白天小时”列是9,因为时间之间的时间为08:00 am到05:00 PM是9小时 triped查询,但没有成功。 | ||
请参见示例 也许一个例子将帮助您更精确地提出问题。 | todate |
lot
20240101
9000000
16000000
with DateRange as(
select CONVERT(datetime,cast(FromDate as varchar) ,114) MyDate
, CONVERT(datetime,cast(ToDate as varchar) ,114) ToDate
,StartTime
,case when FromDate=ToDate then 17000000 else EndTime end EndTime
, Slot ,StartTime as StartTime0,EndTime as EndTime0
from SlotTable
union all
select dateadd(day,1,MyDate) MyDate
,ToDate
,8000000 FromTime
,case when dateadd(day,1,MyDate)<ToDate then 17000000 else EndTime0 end EndTime
, Slot ,StartTime0,EndTime0
from DateRange
where dateadd(day,1,MyDate)<=ToDate
)
select MyDate, StartTime,EndTime, Slot,(EndTime-StartTime)/1000000 Hours
from daterange
Mydate -starttimeENDTIMElothours2024-01-0100:00:00.0009000000
30716000000 |
17000000 | ||||
---|---|---|---|---|
17000000 | ||||
16000000 | ||||