2011-10-10 6 views
7

テーブルから結果を取得する必要があります。この日付は、現在の日付と5の差にする必要があります。Mysql Datediffクエリ

ie。specific_dateカラムがテーブルにあります。日付の形式はYYYY-MM-DDです。

私は、クエリのようなものを必要とし、

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5 

答えて

6

を使用することです:すべての

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 

などがあります。

+0

ありがとうございました。 – sathish

+0

これは数時間でも機能しますか? 'WHERE specific_date <= DATE_ADD(NOW()、INTERVAL 24 HOUR)' –

+0

はい、私の編集を参照してください。 –

3

BETWEEN演算子を見てください。

expr BETWEEN min AND max 

もう一つの方法は、あなたがこれをやろうとしているように見えますDATE_SUBオペレータ

WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)