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

月の最初と最後の平日を取得する方法はありますか?

    関数を定義するのはどうですかFIRST_WDOM() (週/月の就業日)および LAST_WDOM() <のスタイルでcode> LAST_DAY()

    DELIMITER //
    CREATE FUNCTION first_wdom (d DATETIME) -- First work/week day of month
    RETURNS DATE DETERMINISTIC
    BEGIN
      DECLARE first_dom DATE;
      SET first_dom = DATE_FORMAT(d, '%Y-%m-01');
    
      RETURN first_dom + INTERVAL (CASE DAYOFWEEK(first_dom)
                                   WHEN 1 THEN 1
                                   WHEN 7 THEN 2
                                   ELSE 0
                                   END) DAY;
    END //
    CREATE FUNCTION last_wdom (d DATETIME) -- Last work/week day of month
    RETURNS DATE DETERMINISTIC
    BEGIN
      DECLARE last_dom DATE;
      SET last_dom = LAST_DAY(d);
    
      RETURN last_dom - INTERVAL (CASE DAYOFWEEK(last_dom)
                                  WHEN 1 THEN 2
                                  WHEN 7 THEN 1
                                  ELSE 0
                                  END) DAY;
    END //
    DELIMITER ;
    
    mysql> SELECT FIRST_WDOM('2011-05-10'), LAST_WDOM('2011-05-10');
    +--------------------------+-------------------------+
    | FIRST_WDOM('2011-05-10') | LAST_WDOM('2011-05-10') |
    +--------------------------+-------------------------+
    | 2011-05-02               | 2011-05-31              | 
    +--------------------------+-------------------------+
    1 row in set (0.01 sec)
    

    これは、ic3b3rgの回答 、および土曜日と日曜日が週末であると想定しています。 NOW()などを渡すときに切り捨ての警告を回避するために、入力タイプとしてDATEではなくDATETIMEを使用します。 。



    1. MySQL INSERT IF(カスタムifステートメント)

    2. MySQLは600K行からランダムな10行を高速で選択します

    3. 投票システムの一意のIP

    4. csvデータファイルをAmazonRedShiftにコピーする方法は?