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

うるう年のMysqlDayofyear

    NOW()の場所 うるう年ではない2011 、問題は、DAYOFYEARを使用しているため、2月29日以降のうるう年に生まれた人には1日余分にかかることから発生します。 誕生年に対して。

    DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
    DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
    

    DAYOFYEARを行う場所 、生年月日ではなく、現在の年の生年月日が必要です。

    したがって、代わりに:

    DAYOFYEAR(e.birthdate)
    

    次のように今年に変換できます:

    DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
    

    生年月日を変換するもの:

    '2004-04-01'
    

    宛先:

    '2011-04-01'
    

    したがって、変更されたクエリは次のとおりです。

    SELECT      e.id,
                 e.title,
                 e.birthdate
     FROM        employers e
     WHERE       DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
     AND         DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
    

    2月29日に生まれた人は、うるう年以外の3月1日になります。これはまだ60の日です。 。



    1. プレッシャーの下でデータベースのパフォーマンスを測定する

    2. XAMPP for WindowsでMySQLコマンドラインにアクセスするにはどうすればよいですか?

    3. MySQLクエリパフォーマンスチューニング

    4. 同じサーバー上の2つのmysqlデータベース間でクエリを実行するパフォーマンスは?