2013-12-15 121 views
0

嗨我有一個關於MySQL的問題,我嘗試將日期與字符串進行比較。我正在擺弄phpMyAdmin,在我的網站上實現它之前創建正確的SQL查詢,其中字符串表示WHERE子句參數。MySQL日期比較返回null

我有一個名爲「預訂」的表,它有一個名爲「檢入」的列,其中日期設置爲其數據類型。一個條目的「簽入」日期設置爲「2013-12-12」。我計劃發佈結構和條目的圖片,但不能由於我的首發聲望。

我已經瀏覽四周,嘗試了各種變化都在計算器上和其他來源,如發現:

SELECT * FROM `bookings` WHERE DATE_FORMAT('Check In', '%Y-%m-%d') = STR_TO_DATE('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE 'Check In' = STR_TO_DATE('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE 'Check In' = DATE_Format('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE 'Check In' = '2013-12-12' 

所有這些返回0的結果,即使我有與2013年12月12日的日期的條目。這是我在stackoverflow上的第一篇文章,如果有什麼不明確的地方,請原諒自己,但無論如何,謝謝任何人試圖幫助。

+0

如果您沒有用空格命名列,則不需要引用它,然後就不會遇到使用錯誤引號的問題。 – Barmar

+0

是的,你是正確的,它創建一個數據庫時,我犯了一個常見的命名約定的錯誤。 – user3053743

回答

0

'Check In'只是字符串值所以,字符串'檢入'轉換爲「0000-00-00」。

mysql> SELECT DATE_FORMAT('Check In', '%Y-%m-%d'); 
+-------------------------------------+ 
| DATE_FORMAT('Check In', '%Y-%m-%d') | 
+-------------------------------------+ 
| NULL        | 
+-------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> SHOW WARNINGS; 
+---------+------+--------------------------------------+ 
| Level | Code | Message        | 
+---------+------+--------------------------------------+ 
| Warning | 1292 | Incorrect datetime value: 'Check In' | 
+---------+------+--------------------------------------+ 
1 row in set (0.00 sec) 

爲了引用列名,使用了「檢入」。你可以試試這個嗎?

SELECT * FROM `bookings` WHERE DATE_FORMAT(`Check In`, '%Y-%m-%d') = STR_TO_DATE('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE `Check In` = STR_TO_DATE('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE `Check In` = DATE_Format('2013-12-12', '%Y-%m-%d') 

SELECT * FROM `bookings` WHERE `Check In` = '2013-12-12' 
+0

謝謝你解決了一切。更改簽入簽入,它工作正常。謝謝 – user3053743