sql >> データベース >  >> RDS >> Sqlserver

t-sql selectは、年の範囲内のすべての月を取得します

    おやおや...「再帰CTEのカウント」または「rCTE」を使用することは、ループを使用することと同じくらい悪いか悪いです。私がそう言う理由については、次の記事を参照してください。

    http://www.sqlservercentral.com/articles/T-SQL/74118/

    カウントrCTEの「隠しRBAR」を含むRBARなしでそれを行う1つの方法があります。

    --===== Declare and preset some obviously named variables
    DECLARE @StartDate DATETIME,
            @EndDate   DATETIME
    ;
     SELECT @StartDate = '2010-01-14', --We'll get the month for both of these 
            @EndDate   = '2020-12-05'  --dates and everything in between
    ;
    WITH
    cteDates AS
    (--==== Creates a "Tally Table" structure for months to add to start date
         -- calulated by the difference in months between the start and end date.
         -- Then adds those numbers to the start of the month of the start date.
     SELECT TOP (DATEDIFF(mm,@StartDate,@EndDate) + 1)
            MonthDate = DATEADD(mm,DATEDIFF(mm,0,@StartDate) 
                      + (ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1),0)
       FROM sys.all_columns ac1
      CROSS JOIN sys.all_columns ac2
    )
    --===== Slice each "whole month" date into the desired display values.
     SELECT [Year]  = YEAR(MonthDate),
            [Month] = MONTH(MonthDate) 
       FROM cteDates
    ;
    


    1. RoomPersistenceLibraryをAndroidプロジェクトにインポートする方法

    2. 1で始まるように、1次元配列の配列添え字を正規化します。

    3. postgresqlストアドプロシージャをデバッグする方法は?

    4. MySQLとMariaDBデータベースのバックアップリソース