sql - 日期时间值生成 MS SQL

标签 sql sql-server datetime range

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/

相关文章:

mysql - 计算两个子查询mysql之间的百分比

sql - 使用动态变量名创建 SQL 表

sql - 序列生成的主键似乎不能很好地与 select 语句配合使用

c# - 使用 SSIS 数据流任务从平面文件源以编程方式派生列

sql-server - 如何在不知道目标路径或文件名的情况下恢复 SQL Server 数据库备份?

PHP SQL 查询比较预定义日期时间格式中的 DATE

php - SELECT * 在列的 MAX 和第二个 MAX id 之间,其中另一列等于某个输入

sql-server - 如何简单地生成表和数据的CREATE SQL脚本?

python - 比较 pandas 中的 DateOffsets

java - 使用 Resultset 将数据库中的字符串变量(日期时间类型)解析为 LocalDateTime 变量