簡體   English   中英

在MySQL中使用比較運算符(大於/小於/等於)比較日期/日期時間/時間/時間戳等是否合法?

[英]Is it legal to compare date / datetime / time / timestamp / etc using comparison operators ( greater than / less than / equals ) in MySQL?

有人可以指出我的官方MySQL文檔,其中指出您可以進行以下比較:

DECLARE mydate DATE;
...
IF mydate > '2015-04-01' THEN
    ...
END IF;

MySQL參考摘錄

當您使用<, <=, =, >=, >, or BETWEEN operators將DATE,TIME,DATETIME或TIMESTAMP與常量字符串進行比較時,MySQL通常會將字符串轉換為內部長整數以進行比較(以及進行更多“輕松”的字符串檢查)。 但是,此轉換受以下例外的約束:

  1. 比較兩列時
  2. 當您將DATE,TIME,DATETIME或TIMESTAMP列與表達式進行比較時
  3. 當您使用除剛剛列出的以外的任何比較方法時,例如IN或STRCMP()。

對於這些異常,通過將對象轉換為字符串並執行字符串比較來完成比較。 為了安全起見,假設要將字符串與字符串進行比較,則假定將字符串作為字符串進行比較,並使用適當的字符串函數。 特殊的“零”日期“ 0000-00-00”可以存儲和檢索為“ 0000-00-00”。 通過連接器/ 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';

暫無
暫無

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

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