2015-06-04 141 views

回答

2

摘自MySQL reference

當你比較DATE,TIME,DATETIME或TIMESTAMP到一個常量字符串與<, <=, =, >=, >, or BETWEEN operators,MySQL通常會將字符串轉換爲一個內部長整數,以加快比較(也有一點「放鬆」字符串檢查)。然而,這種轉換是受以下情況除外:

  1. 當你比較兩列
  2. 當您在DATE,TIME,DATETIME或TIMESTAMP列與一個 表達
  3. 當你使用任何比較方法,而不是剛剛列出的方法,例如IN或STRCMP()等 。

對於這些例外情況,通過將對象轉換爲字符串並執行字符串比較來完成比較。 爲了安全起見,假定字符串被比較爲字符串,並且如果要將時間值與字符串進行比較,請使用適當的字符串函數。 特殊的「零」日期'0000-00-00'可以作爲'0000-00-00'存儲和檢索。當通過Connector/ODBC使用'0000-00-00'日期時,它會自動轉換爲NULL,因爲ODBC無法處理那種日期。 因爲MySQL執行剛纔描述的轉換,下述語句均能正常工作(假設IDATE是DATE列):

INSERT INTO t1 (idate) VALUES (19970505); 
INSERT INTO t1 (idate) VALUES ('19970505'); 
INSERT INTO t1 (idate) VALUES ('97-05-05'); 
INSERT INTO t1 (idate) VALUES ('1997.05.05'); 
INSERT INTO t1 (idate) VALUES ('1997 05 05'); 
INSERT INTO t1 (idate) VALUES ('0000-00-00'); 

SELECT idate FROM t1 WHERE idate >= '1997-05-05'; 
SELECT idate FROM t1 WHERE idate >= 19970505; 
SELECT MOD(idate,100) FROM t1 WHERE idate >= 19970505; 
SELECT idate FROM t1 WHERE idate >= '19970505';