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

SQL - 月の初日と月名の一時テーブルまたは CTE を作成する

    再帰 cte を使用する 1 つの方法:

    declare @calYear int = 5, @currentYear char(4) = '2014'
    
    ;with cte (dt) as (
        select DATEFROMPARTS(@currentyear,1,1) dt
        union all
        select dateadd(month,1,dt) 
        from cte where dt < dateadd(year,@calyear,DATEFROMPARTS(@currentyear,1,1))
        )
    
    select year(dt) YearDesc, datename(month, dt) MonthName, month(dt) MonthNum, dt FirstDayOfMonth 
    from cte
    order by dt 
    

    または数値テーブルを使用:(この場合は master..spt_values)

    declare @calYear int = 5, @currentYear char(4) = '2014'
    
    ;with cte2 (dt) as (
        select dateadd(month,number,DATEFROMPARTS(@currentyear,1,1)) dt
        from master..spt_values where type = 'p'
        and number <= 12*@calYear
        )
    select year(dt) YearDesc, datename(month, dt) MonthName, month(dt) MonthNum, dt FirstDayOfMonth 
    from cte2
    order by dt 
    



    1. その場でのPHP合計エコー結果(難しい)

    2. SQLAlchemy、PostgreSQL、array_agg:array_aggからアイテムを選択する方法は?

    3. PostgreSQLの「エラー:各INTERSECTクエリには同じ数の列が必要」を修正しました

    4. mysqlパフォーマンスのPDO