2016-05-13 67 views
-3

我有兩個查詢。這些查詢中沒有錯誤只是結果是不同的。爲什麼不同的結果使用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

從本質上講,你問爲什麼是兩個不同的查詢產生不同的結果:)在第一個查詢,你檢查是否END_DATE爲NULL具體而第二個檢查如果END_DATE也等於'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:如果您想設置一個where子句並選擇字段爲空,你應該使用 「WHERE END_DATE IS NULL」,而不是「WHERE end_date = NULL」

+0

如果它不相同,爲什麼它將NULL保存爲'0000-00-00'? –

+0

@HamzaZafeer然後你可能會保存NULL錯誤,告訴我們該代碼。或者查看這個例子http://sqlfiddle.com/#!9/4bf612/1 –

+0

您的end_date列不可爲空。你的ORM或其他必須保存一個默認值而不是NULL – Borjante

0

從我的理解來看,NULL與Date類型的0000-00-00不同。有些開發人員使用0000-00-00作爲默認值。由於NULL和0000-00-00都不相同,因此您會看到兩個不同的結果集。

入住這default date '0000-00-00 00:00:00' or null

相關問題