扩展日期范围在两个日期之间 我正在尝试在两个日期之间扩展日期 800000是上午08:00 16000000是16:00小时(PM) 30是30分钟的插槽 从日期开始 迄今为止 开始时间 结束时间 投币口 20240101 20240105 8000000 16000000 ...

问题描述 投票:0回答:1

30是30分钟的插槽

从date

todate
开始时间时时间lot20240101202401058000000 16000000 30指望输出Date
开始时间

时时间
lot白天总数 17000000 917000000 2024010317000000 8000000 17000000 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 -starttime
20240101 8000000 30
20240102 8000000 30 9
8000000 30 9 20240104
30 9 在“白天小时”列是9,因为时间之间的时间为08:00 am到05:00 PM是9小时 triped查询,但没有成功。
请参见示例 也许一个例子将帮助您更精确地提出问题。 todate
ENDTIME

lot


20240101

sql sql-server
1个回答
0
投票

9000000
16000000

30

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 307
16000000
2024-01-0200:00:00.000
8000000 17000000 3092024-01-0300:00:00.0008000000 3092024-01-0400:00:00.0008000000 3092024-01-0500:00:00.0008000000 308 Fiddle
17000000
17000000
16000000
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.