[英]SQL DATE and TIME to DATETIME
我的表中有日期和時間列。 我想選擇日期和時間大於當前時間加上一小時的所有對象:
我嘗試了以下方法:
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)
但是,從邏輯上講這是不正確的。 如果日期是明天,並且時間小於當前的HH:MM,則不會選擇該記錄。 如何使用日期和時間與當前日期時間進行比較? 我正在使用mysql的php 5.2
首先,我建議使用DATETIME列以使此過濾更加有效。 但是,如果您不能更改,這將起作用:
SELECT * FROM mytable
WHERE (date = CURDATE() AND time >= TIME(NOW() + INTERVAL 1 hour))
OR date > CURDATE()
您可以將條件分為兩個條件...
當日期等於今天並且比當前時間早一個小時以上時:
date == CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)
當日期大於今天:
date > CURDATE()
...並使用OR
和括號將它們鏈接在一起:
SELECT * FROM mytable WHERE (date == CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)) OR date > CURDATE()
首先檢查日期是否是今天,如果時間大於當前時間。 第二個條件是檢查日期是否大於當前日期。 因為如果日期大於當前日期,則時間早於當前時間。
SELECT * FROM mytable
WHERE (date = CURDATE() AND time >= TIME(NOW() + INTERVAL 1 hour))
OR date > CURDATE()
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(HOUR(NOW()) + 1);
也許只是
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= HOUR(NOW()) + 1;
正如@Pekka所指出的那樣,到目前為止發布的所有答案在晚上11點至午夜之間都會給出錯誤的答案。 我不使用MySQL,但可以查找內容。 更好的方法似乎是timestamp()函數。
此參考聲明:
With two arguments, it adds the time expression expr2 to the date
or datetime expression expr1 and returns the result as a datetime value.
為什么不將timestamp()與兩個參數一起使用?
你可以這樣做。
SELECT
*
FROM
mytable
WHERE
CONCAT( date, " ", time ) > (NOW() + INTERVAL 1 HOUR );
我個人建議您刪除日期和時間的單獨字段,並創建一個合並的“ DATETIME”字段。 我還建議向該字段添加一個索引。
這將使您的查詢更好,更快。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.