簡體   English   中英

mysql datetime比較

[英]mysql datetime comparison

例如,以下查詢工作正常:

SELECT * 
  FROM quotes 
 WHERE expires_at <= '2010-10-15 10:00:00';

但這顯然是在執行'字符串'比較 - 我想知道是否有一個內置於MySQL的函數專門進行'datetime'比較。

......這顯然是在執行'字符串'比較

否 - 如果日期/時間格式與支持的格式匹配,MySQL將執行隱式轉換,以根據與其進行比較的列將值轉換為DATETIME。 同樣的事情發生在:

WHERE int_column = '1'

...其中字符串值“1”轉換為INTeger,因為int_column的數據類型是INT,而不是CHAR / VARCHAR / TEXT。

如果要將字符串顯式轉換為DATETIME, STR_TO_DATE函數將是最佳選擇:

WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')

但這顯然是在進行“字符串”比較

不會。該字符串將自動轉換為DATETIME值。

11.2。 表達式評估中的類型轉換。

當操作符與不同類型的操作數一起使用時,會發生類型轉換以使操作數兼容。 某些轉換是隱式發生的。 例如,MySQL會根據需要自動將數字轉換為字符串,反之亦然。

我知道它很老了,但我剛剛遇到問題,我在SQL文檔中看到了:

[為了將BETWEEN與日期或時間值一起使用時獲得最佳結果,請使用CAST()將值顯式轉換為所需的數據類型。 示例:如果將DATETIME與兩個DATE值進行比較,請將DATE值轉換為DATETIME值。 如果在與DATE的比較中使用字符串常量(如“2001-1-1”),則將字符串強制轉換為DATE。

我認為最好使用STR_TO_DATE,因為他們花時間為此創建一個函數,以及我在BETWEEN doc中發現這個的事實...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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