web-dev-qa-db-ja.com

1年以上前のMYSQL SELECTレコード

データベースから1年以上前のすべてのレコードのリストを取得しようとしましたが、expired_contractのフィールドには次の情報があります。

expired_contract DATE NOT NULL

したがって、次の形式で日付を取得します:YEAR-MM-DD、次に、悲しいことに機能させることができないsqlがあります。

$sql = "SELECT * 
        FROM My_Contracte 
        WHERE expired_contract >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
        ORDER BY id_contract DESC";

多くの「WHERE」コマンドを試してみましたが、期待どおりに機能するものはありませんでした。これを機能させるのを手伝ってくれませんか?これを約5時間探していますが、動作させるためには正確なコマンドが必要です。

$ sqlは私に何かを取得しますが、それを間違っています、2015-10-01、2016-10-01のような日付を取得し、2014-09-30のような日付は表示されません。

基本的に私は次のような日付を表示したいと思います:

今日が2015-10-01の場合、1年前より古い日付を表示したいので、2014-09-30から2015-10-01、2016-10-01のような日付を表示しません。

多分私はデータベースで何かを編集する必要がありますか?

あなたの助けを探して、ありがとう!

18
Alex Grecu

あなたはより大きいか等しいの代わりにより低いを使用する必要があります:

$sql = "SELECT * FROM My_Contracte WHERE expired_contract < DATE_SUB(NOW(),INTERVAL 1 YEAR) 
28
Jens
SELECT SUM(impressions) AS impressions FROM My_Contracte  where DATE(expired_contract) BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 1 YEAR ) AND CURDATE( )
0
Mani
SELECT * FROM My_Contracte WHERE (expired_contract NOT BETWEEN DATE_SUB(CURDATE(),INTERVAL 1 YEAR) AND CURDATE()) and expired_contract<=NOW() ;
0
Master Yoda