SQL Server 2000(创建给定日期范围的所有日期)

时间:2009-05-08 17:45:36

标签: sql sql-server-2000

我想知道在SQL Server 2000中是否有办法在给定开始日期和结束日期的情况下创建所有日期。我知道我可以用T-SQL循环来实现这一点。我正在寻找一个非循环的解决方案。同样在2005年,您可以使用recursive with子句。该解决方案还可以使用其中包含数字的T表来与表连接。我再次看一下SQL Server 2000非循环/使用T表解决方案。有没有?

2 个答案:

答案 0 :(得分:2)

SELECT
     DATEADD(dy, T.number, @start_date)
FROM
     T
WHERE
     number BETWEEN 0 AND DATEDIFF(dy, @start_date, @end_date)

日历表对于这类查询也很有用,您可以向其添加一些特定于日期的信息,例如一天是假日,计为“营业日”等等。

答案 1 :(得分:1)

试试这个:

创建数字表,只需要在数据库中执行一次:

CREATE TABLE Numbers (Number int NOT NULL)
GO
ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)
GO
DECLARE @x int
set @x=0
WHILE @X<8000
BEGIN
    SET @X=@X+1
    INSERT INTO Numbers VALUES (@x)
END

- 运行您的查询:

DECLARE @StartDate datetime
DECLARE @EndDate   datetime

set @StartDate='05/03/2009'
set @EndDate='05/12/2009'

SELECT
    @StartDate+Number-1
    FROM Numbers
    WHERE Number<=DATEDIFF(day, @StartDate, @EndDate)+1