SQL Server 2000 (создание всех дат с учетом диапазона дат) - PullRequest
0 голосов
/ 08 мая 2009

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

Ответы [ 2 ]

2 голосов
/ 08 мая 2009
SELECT
     DATEADD(dy, T.number, @start_date)
FROM
     T
WHERE
     number BETWEEN 0 AND DATEDIFF(dy, @start_date, @end_date)

Таблица Календаря также может быть полезна для таких запросов, и вы можете добавить к ней некоторую информацию, относящуюся к дате, например, является ли день выходным днем, считается «рабочим» днем ​​и т. Д.

1 голос
/ 08 мая 2009

попробуйте это:

создать таблицу чисел, нужно сделать это только один раз в вашей БД:

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
...