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

MysqlDatediffクエリ

    これを行おうとしているようです:

    WHERE specific_date < (NOW() + 5 days)
    

    まず、境界の場合について慎重に考えてください。これらの境界ケースは、SQLで足首を噛む可能性があります。本当に欲しいですか

    WHERE specific_date <= (NOW() + 5 days)
    

    specific_dateを実行します 列のタイムスタンプには日(つまり、時刻が真夜中と等しい日付)のみが含まれていますか、それとも日付と時刻が含まれていますか?希望する結果を得るには、それらの詳細に注意する必要があります。

    とにかく、これを試してください:

    WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
    

    これは、そのようなルックアップを行うための良い方法です。列の値は、不等式述語(<=)の片側で独立しています。 )列にインデックスがある場合、mySQLはインデックス範囲スキャンを実行できます。

    MySQLの日付演算は非常に柔軟です。できる

       NOW() + INTERVAL 10 SECOND
       NOW() - INTERVAL 2 MINUTE
       NOW() + INTERVAL 4 HOUR
       CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
       LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH  /*first day of present month*/
       NOW() - INTERVAL 1 QUARTER
       CURDATE() - INTERVAL 5 YEAR
    

    など。



    1. 複数の選択スレッドを持つMySQLプロデューサーコンシューマー

    2. 最初と最後の出現でグループ化

    3. MariaDBでのCOALESCE()のしくみ

    4. フィールド間の違いについてテーブルの行を比較する