SQL选择一年中包含9个空白INT字段的所有日期

use*_*432 5 sql sql-server

我试图在一个SELECT语句中获得一年中的所有日期,其中9个INT字段的值为0.

所以基本上我需要以下内容:

1/1/2007 0 0 0 0 0 0 0 0 0
1/2/2007 0 0 0 0 0 0 0 0 0
1/3/2007 0 0 0 0 0 0 0 0 0 
Run Code Online (Sandbox Code Playgroud)

等等一整年.

这一年总是1月1日至12月31日

这是一个更大的查询的一部分,但我不认为这部分是必要的,因为这是我需要的部分....

谢谢!

Abe*_*ler 8

干得好:

WITH Dates AS (
        SELECT
         [Date] = CONVERT(DATETIME,'01/01/2010')
        UNION ALL SELECT
         [Date] = DATEADD(DAY, 1, [Date])
        FROM
         Dates
        WHERE
         Date < '12/31/2010'
) SELECT
 [Date],0,0,0,0,0,0,0,0,0
FROM
 Dates
 OPTION (MAXRECURSION 400)
Run Code Online (Sandbox Code Playgroud)

陶醉于递归CTE的魔力!


Bra*_*rad 3

进行更改以适应OP将结果放入@table的愿望。

DECLARE @year INT
   ,@startDate DATE
SET @year = 2010

SET @startDate = CAST(@year AS VARCHAR) + '-01-01'

DECLARE @DateTable TABLE
    (
     [Date] DATE ,[Col1] INT ,[Col2] INT ,[Col3] INT ,[Col4] INT
    ,[Col5] INT ,[Col6] INT ,[Col7] INT ,[Col8] INT ,[Col9] INT
    )
--
;
WITH    cte
          AS ( SELECT   @StartDate [Date]
               UNION ALL
               SELECT   DATEADD(DAY, 1, [Date])
               FROM     [cte]
               WHERE    [Date] < DATEADD(year, 1, @StartDate)
             )
    INSERT  INTO @DateTable
            ( 
             [Date] ,[Col1] ,[Col2] ,[Col3] ,[Col4] ,[Col5]
            ,[Col6] ,[Col7] ,[Col8] ,[Col9] )
            SELECT  [Date] ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
            FROM    [cte] OPTION (MAXRECURSION 366)
Run Code Online (Sandbox Code Playgroud)

如果你要经常使用这个,

考虑创建一个Date Table或至少一个Tally Table