【发布时间】:2016-11-15 02:49:36
【问题描述】:
在 SQL Server 2000 中,我希望能够列出 2 个日期之间的所有日期,包括每天的小时数,所以如果我有 @fromdate = 2016-07-01 00:00:00 和 @todate = 2016-07-05 00:00:00,那么我需要一个列表:
2016-07-01 00:00:00
2016-07-01 01:00:00
2016-07-01 02:00:00
2016-07-01 03:00:00
2016-07-01 04:00:00
...
2016-07-04 23:00:00
2016-07-05 00:00:00
现在这个查询已经进行到一半了:
declare @fromdate as datetime
declare @todate as datetime
set @FromDate = '2016-07-11 00:00:00.000'
set @ToDate = '2016-07-21 00:00:00.000'
declare @i int, @j int
set @i = convert(int, @todate - @fromdate)
set @j = 0
while @i >= 0
begin
while @j < 24
begin
select dateadd(hour, @j, @ToDate - @i) as date, @j as Hour
set @j = @j + 1
end
set @i = @i - 1
end
它返回第一天的每小时拆分,但不会跳到第二天。如果我禁用内部while 循环,则外部循环无需数小时即可正常工作。欢迎提出任何建议,记住它是 SQL Server 2000,因此没有任何高级功能。
【问题讨论】:
-
这会很慢,你不想快点吗?
-
How to generate a range of dates in SQL Server 的可能重复项只需将
day更改为hour -
特别是因为这是 sql 2000,您需要一个数字/计数表。顺便说一句,你会升级吗?它已经停止支持超过 6 年了。仅仅因为我们还有 14.4 调制解调器并不意味着我们应该继续使用它。 :)
-
Sql Server 2000 已经过时了。它不再获得任何补丁,即使是针对关键的安全问题,并且现在已经有一段时间没有了。继续使用它是非常不负责任的。升级此服务器是工作 1。
标签: sql sql-server loops while-loop sql-server-2000