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