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

mySQLSELECTの今後の誕生日

    次の7日間ですべての誕生日を取得するには、生年月日と今日の年の差を生年月日に追加し、それが次の7日以内に収まるかどうかを確認します。

    SELECT * 
    FROM  persons 
    WHERE  DATE_ADD(birthday, 
                    INTERVAL YEAR(CURDATE())-YEAR(birthday)
                             + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                    YEAR)  
                BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY);
    

    今日の誕生日を除外したい場合は、>を変更してください >=

    SELECT * 
    FROM  persons 
    WHERE  DATE_ADD(birthday, 
                    INTERVAL YEAR(CURDATE())-YEAR(birthday)
                             + IF(DAYOFYEAR(CURDATE()) >= DAYOFYEAR(birthday),1,0)
                    YEAR)  
                BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY);
    
    -- Same as above query with another way to exclude today's birthdays 
    SELECT * 
    FROM  persons 
    WHERE  DATE_ADD(birthday, 
                    INTERVAL YEAR(CURDATE())-YEAR(birthday)
                             + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                    YEAR) 
                BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
         AND DATE_ADD(birthday, INTERVAL YEAR(CURDATE())-YEAR(birthday) YEAR) <> CURDATE();
    
    
    -- Same as above query with another way to exclude today's birthdays 
    SELECT * 
    FROM  persons 
    WHERE  DATE_ADD(birthday, 
                    INTERVAL YEAR(CURDATE())-YEAR(birthday)
                             + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                    YEAR) 
                BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
         AND (MONTH(birthday) <> MONTH(CURDATE()) OR DAY(birthday) <> DAY(CURDATE()));
    

    こちらがDEMO です。 すべてのクエリの



    1. TNSPINGはOKですが、sqlplusはORA-12154を提供しますか?

    2. データベース管理システムに関する5つの興味深い事実

    3. oraclesqlの動的ピボット-手順

    4. JOINによって別のテーブルから存在しないデータを見つける方法は?