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

営業日と暦日で表を更新

    どうぞ。この再帰 CTE は、1 か月間の BD を提供します:

    declare @forwhichdate datetime
    set @forwhichdate ='20170401'
    ;with bd as(
    select 
    DATEADD(DAY,
    CASE
        (DATEPART(WEEKDAY, DATEADD(MONTH, DATEDIFF(MONTH, 0, @forwhichdate), 0)) + @@DATEFIRST - 1) % 7
        WHEN 6 THEN 2 
        WHEN 7 THEN 1
        ELSE 0
    END,
    DATEADD(MONTH, DATEDIFF(MONTH, 0, @forwhichdate), 0)
    ) as bd, 1 as n
    UNION ALL
    SELECT DATEADD(DAY,
    CASE
        (DATEPART(WEEKDAY, bd.bd) + @@DATEFIRST - 1) % 7
        WHEN 5 THEN 3
        WHEN 6 THEN 2
        ELSE 1
    END,
    bd.bd
    ) as db, 
    bd.n+1
    from bd where month(bd.bd) = month(@forwhichdate)
    )
    select * from bd
    

    結果:

    bd                      n
    ----------------------- -----------
    2017-04-03 00:00:00.000 1
    2017-04-04 00:00:00.000 2
    2017-04-05 00:00:00.000 3
    2017-04-06 00:00:00.000 4
    2017-04-07 00:00:00.000 5
    2017-04-10 00:00:00.000 6
    2017-04-11 00:00:00.000 7
    2017-04-12 00:00:00.000 8
    2017-04-13 00:00:00.000 9
    2017-04-14 00:00:00.000 10
    2017-04-17 00:00:00.000 11
    2017-04-18 00:00:00.000 12
    2017-04-19 00:00:00.000 13
    2017-04-20 00:00:00.000 14
    2017-04-21 00:00:00.000 15
    2017-04-24 00:00:00.000 16
    2017-04-25 00:00:00.000 17
    2017-04-26 00:00:00.000 18
    2017-04-27 00:00:00.000 19
    2017-04-28 00:00:00.000 20
    2017-05-01 00:00:00.000 21
    
    (21 row(s) affected)
    

    ただし、実際には、クエリで休日もチェックする必要があります。



    1. 結果セットを変数に選択し、同じストアドプロシージャの後で更新でその変数を使用します

    2. MariaDB LAST_INSERT_ID()の説明

    3. MySQLでアジア言語の文字を含むテキストをクエリするにはどうすればよいですか?

    4. node.js mysqlエラー:ECONNREFUSED