簡體   English   中英

SQL DATE和TIME到DATETIME

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM