Автозаполнение CTE в SQL Server - PullRequest
       0

Автозаполнение CTE в SQL Server

1 голос
/ 20 декабря 2010

Как я могу автоматически заполнить CTE, чтобы он содержал первый день каждого месяца Например:

1-1-2010
2-1-2010
3-1-2010
4-1-2010

и так далее.Я ищу запрос для этого вместо использования оператора UNION.

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Взгляните на что-то вроде

DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '01 Jan 2010',
        @EndDate = '01 Jan 2011'

;WITH Dates AS (
        SELECT  @StartDate StartOfMonth
        UNION ALL
        SELECT DATEADD(month,1,StartOfMonth) StartOfMonth
        FROM    Dates
        WHERE   DATEADD(month,1,StartOfMonth) <= @EndDate
)
SELECT  *
FROM    Dates

ВЫХОД

StartOfMonth
-----------------------
2010-01-01 00:00:00.000
2010-02-01 00:00:00.000
2010-03-01 00:00:00.000
2010-04-01 00:00:00.000
2010-05-01 00:00:00.000
2010-06-01 00:00:00.000
2010-07-01 00:00:00.000
2010-08-01 00:00:00.000
2010-09-01 00:00:00.000
2010-10-01 00:00:00.000
2010-11-01 00:00:00.000
2010-12-01 00:00:00.000
2011-01-01 00:00:00.000

РЕДАКТИРОВАТЬ

С указанным именем столбца

DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '01 Jan 2010',
        @EndDate = '01 Jan 2011'

;WITH Dates (dt) AS (
        SELECT  @StartDate dt
        UNION ALL
        SELECT DATEADD(month,1,dt) dt
        FROM    Dates
        WHERE   DATEADD(month,1,dt) <= @EndDate
)
SELECT  *
FROM    Dates
1 голос
/ 20 декабря 2010
WITH CTEDates AS
(
SELECT CAST('20100101' AS DATETIME) AS DateVal
UNION ALL
SELECT DATEADD(mm, 1, DateVal)
FROM CTEDates
WHERE DateVal < '20101201'
)

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