2013-01-10 40 views
4

我有一個日期字段的數據類型datetime,即使H:s:i存儲,但我不想考慮在驗證中,我使用CURDATE()在查詢條件但'H S:我」正在考慮,例如建議合適的mysql日期函數

SELECT ('2013-01-10 05:10:50' <= CURDATE()) FROM dual 

上面的查詢返回false(0),爲什麼不真(1),因爲2013-01-10 05:10:50是過去的時間。總之,我想存儲'H:s:i',但不應該在驗證MySql函數適合哪種情況下進行驗證?

更新如下內容

我不想使用NOW()SYSDATE(),因爲這些功能會考慮H:s:i在驗證,所以,我用CURDATE()但預期的結果是,當我使用CURDATE()不同。

+0

CURDATE()返回「2013年1月10日」 –

回答

1

你可以試試這個:

SELECT DATE('2013-01-10 05:10:50') <= CURDATE() FROM DUAL; 

SELECT '2013-01-10 05:10:50' <= DATE_FORMAT(NOW(), '%Y-%m-%d 23:59:59') FROM DUAL; 
+0

感謝您的回覆,上面的語句將被罰款當我使用雙表時,假設我從table_name中選擇*,其中date_field1 <= CURDATE()',這裏date_field1的值是'2013-01-10 05:10:50'。 –

+0

您可以輕鬆地做到這一點。 SELECT * FROM table_name WHERE DATE(date_field1)<=使用此查詢的CURDATE() –

+0

感謝它的返回預期的輸出,如果有其他替代方案,然後建議我。 –

2

您的查詢返回false因爲CURDATE()回報日期沒有日期和時間。與日期和時間進行比較,僅返回日期意味着2012-01-10 00:00:00。因此CURDATE()不在2013-01-10 05:10:50之前。

我建議你使用NOW() - 這確實會返回日期和時間。

Docs for NOW() here

2

CURDATE()不包括時間,所以它因此將第9/10的邊界上00:00:00或午夜。如果你想這樣做檢查使用NOW()而不是

0

使用now()而不是curdate()

now()返回當前日期和時間,而curdate()返回其轉換爲用於比較的daterime和戈旺,如果00:00:00

0

你必須使用時間分量NOW()或CURRENT_TIMESTAMP

當前日期