DateTime 值有两个变量可用:例如 @STARTDATETIME = '2020-10-21 14:45' 和 @ENDDATETIME = '2020-10-22 19:00'
如果 STARTDATETIME = '2020-10-21 12:00' 和 ENDDATETIME = '2020-10-21 16:00' 等日期之间只有一天,则变量必须保存初始值。
如果值之间有一天或多天,则第一个日期必须从给定时间戳开始到 16:00。所有中间日期的时间必须为 08:00 至 16:00。最后一天必须从 08:00 时间开始,直到给定的时间戳。
完整示例:
@STARTDATETIME = '2020-10-21 14:45' and @ENDDATETIME = '2020-10-23 19:15'
期望的输出(表):
STARTDATETIME | ENDDATETIME
'2020-10-21 14:45' | '2020-10-21 16:00'
'2020-10-22 08:00' | '2020-10-22 16:00'
'2020-10-23 08:00' | '2020-10-23 19:15'
最佳答案
您可以使用递归 CTE:
with dates as (
select @STARTDATETIME as startdt,
(case when datediff(day, @STARTDATETIME, @ENDDATETIME) = 0
then @ENDDATETIME
else dateadd(day, 1, convert(date, @STARTDATETIME))
end) as enddt
union all
select enddte,
(case when datediff(day, enddte, @ENDDATETIME) = 0
then @ENDDATETIME
else dateadd(day, 1, convert(date, enddte))
end) as enddt,
@ENDDATETIME as enddatetime
from dates
where enddt < @enddatetime
)
select *
from date;
关于sql - 日期时间值生成 MS SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64716931/