2009-05-08 1 views
0

Мне было интересно, есть ли способ в SQL Server 2000 создать все даты с датой начала и окончания в результате. Я знаю, что могу добиться этого с помощью цикла T-SQL. Я ищу ненужное решение. Также в 2005 году вы можете использовать предложение recursive with. В решении также может быть использована таблица T, в которой есть номера, чтобы присоединиться к таблице. Опять же, я смотрю на SQL Server 2000 без циклов/использование T таблиц. Есть ли?SQL Server 2000 (создание всех дат с датерами)

ответ

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

таблица Календарь также может быть полезным для такого рода запросов, и вы можете добавить дату конкретную информацию к нему, например, является ли день это праздник, считается как «бизнес» день и т.д.

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 @[email protected]+1 
    INSERT INTO Numbers VALUES (@x) 
END 

--run ваш запрос:

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