Генерация диапазона констант в SQL Server - PullRequest
1 голос
/ 06 октября 2010

Есть ли способ выбрать диапазон констант, например, каждое целое число от 1 до 100 или каждый месяц между двумя датами?

Вместо этого ...

select '2010-01-01' union
select '2010-02-01' union
select '2010-03-01' union
select '2010-04-01' union
select '2010-05-01' union
select '2010-06-01' union
select '2010-07-01' union
select '2010-08-01' union
select '2010-09-01' union
select '2010-10-01' union
select '2010-11-01' union
select '2010-12-01'

1 Ответ

6 голосов
/ 06 октября 2010

Вы можете использовать запрос CTE для каждого целого числа от 1 до 100.

WITH IntegerRangeCTE([i]) AS
(
    SELECT
        1 AS [i]
    UNION ALL
    SELECT
        [i] + 1
    FROM
        IntegerRangeCTE
    WHERE [i] < 100
)
SELECT * FROM IntegerRangeCTE

Для дат в интервале с 2010-01-01 по 2010-12-31 вы можете использовать это.

WITH DateRangeCTE([d]) AS
(
    SELECT
        CONVERT(DATETIME, '2010-01-01') AS [d]
    UNION ALL
    SELECT
        DATEADD(m, 1, [d]) AS [d]
    FROM
        DateRangeCTE
    WHERE [d] < DATEADD(m, -1, CONVERT(DATETIME, '2010-12-31'))
)
SELECT * FROM DateRangeCTE

Если вы получаете сообщение "Оператор завершен. Максимальная рекурсия N была исчерпана до завершения оператора." , используйте подсказку запроса MAXRECURSION .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...