2016-05-13 13 views
-3

私は2つのクエリを持っています。これらのクエリにエラーはありません。結果だけが異なります。クエリひとつのなぜMysqlクエリを使用して異なる結果

クエリ1

SELECT * FROM notices 
WHERE CURDATE() < end_date 
OR end_date = NULL 
ORDER BY id 

結果:

enter image description here

クエリ2

select * from notices 
where CURDATE() < end_date or end_date='0000-00-00' 
order by id 

クエリ二つの結果:

enter image description here

テーブル構造

enter image description here

質問

私の質問は、なぜ、クエリ1ではないということですクエリ2と同じ結果を示していますか?

+1

、 '0000-00-00'に等しい。 –

+0

しかし、私が挿入するとき、私は 'NULL'を使用して終了日に' 0000-00-00'を保存します。だから私は選択中になぜそれが 'NULL'と一緒に働いていないと言っています –

+0

end_dateカラムの定義に' NOT NULL DEFAULT '0000-00-00''が含まれているように聞こえています。つまり、行がデータベースに挿入されたときに 'end_date'が指定されていないと、 '0000-00-00'が代わりに使用されます。質問をテーブルスキーマで更新してください –

答えて

1

NULLは "0000-00-00"

PDと同じではありませんので:フィールドが "END_DATEがNULL IS WHERE" あなたが使用する必要があるnullのどこでwhere句を設定して選択したい場合は、ありません"WHERE end_date = NULL"

+0

もしそれが同じでないなら、なぜ '0000-00-00'としてNULLを保存するのですか? –

+0

@HamzaZafeerあなたは恐らくNULLを間違って保存しているので、そのコードを見せてください。またはこの例を確認してください。http://sqlfiddle.com/#!9/4bf612/1 –

+0

あなたのend_date列にはnullを設定できません。 ORMなど、NULLではなくデフォルト値を保存する必要があります – Borjante

0

私の理解では、NULLは0000-00-00のDate型です。一部の開発者は0000-00-00をデフォルト値として使用しています。 NULLと0000-00-00の両方が異なるため、2つの異なる結果セットが表示されています。二つの異なるクエリは異なる結果を生成する理由:)最初のクエリでは、あなたがチェックしているEND_DATEが、具体的NULLであれば、一方、第2の1つのチェックEND_DATEでもある場合は、あなたが求めている

チェック基本的にこのdefault date '0000-00-00 00:00:00' or null

関連する問題