1

现在,我想创建一个函数,使用 SQL 生成从日期 x 到日期 y 的时间序列行。

该函数有两个日期输入:x 和 y。它们是没有时间的日期(即时间是 00:00:00)。该函数将如下所示:

function (@x date, @y date)

然后,结果将生成从日期 x 到日期 y 的时间序列行。每次相差15分钟。结果将不包括日期 y。

例如,如果我调用函数 ('2013-06-19', '2013-06-21'),结果将是:

'2013-06-19 00:00:00'
'2013-06-19 00:15:00'
'2013-06-19 00:30:00'
...
'2013-06-19 23:30:00 '
'2013-06-19 23:45:00''
'2013-06-20 00:00:00''
'2013-06-20 00:15:00'
...
'2013-06-20 23:30:
00''2013-06-20 23:45:00 '

4

1 回答 1

1

从性能的角度来看,您宁愿创建一个包含您可能需要的所有日期的表格。

即使您不想拥有这样的表格,那么无论如何您都需要一个计数表(数字表)。

计数表

select  
    DATEADD(mi, n * 15, @x) 
from (
    select ROW_NUMBER() over (order by (select null)) - 1
    from
    master.dbo.spt_values
) as virtualTally(n)
where n < datediff(HH, @x , @y) * 4

输出是:

2013-06-19 00:00:00.000
2013-06-19 00:15:00.000
2013-06-19 00:30:00.000
...
2013-06-20 23:15:00.000
2013-06-20 23:30:00.000
2013-06-20 23:45:00.000
于 2013-06-19T09:09:34.090 回答