在MySQL中使用比较运算符(大于/小于/等于)比较日期/日期时间/时间/时间戳/等是否合法?

时间:2015-06-04 15:23:39

标签: mysql

有人可以指向我的官方MySQL文档,其中声明您可以进行这样的比较:

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

1 个答案:

答案 0 :(得分:2)

摘自MySQL reference

当您将DATE,TIME,DATETIME或TIMESTAMP与<, <=, =, >=, >, or BETWEEN operators的常量字符串进行比较时,MySQL通常会将字符串转换为内部长整数,以便更快地进行比较(还有一些更“放松”)字符串检查)。但是,此转换受以下例外情况限制:

  1. 比较两列时
  2. 将DATE,TIME,DATETIME或TIMESTAMP列与a进行比较时 表达
  3. 当您使用除了刚刚列出的那些之外的任何比较方法时, 例如IN或STRCMP()。
  4. 对于这些异常,通过将对象转换为字符串并执行字符串比较来完成比较。 为了安全起见,假设要将字符串作为字符串进行比较,并且如果要将时间值与字符串进行比较,请使用相应的字符串函数。 特殊的“零”日期&#39; 0000-00-00&#39;可以作为&#39; 0000-00-00来存储和检索。当一个&#39; 0000-00-00&#39; date通过Connector / ODBC使用,它会自动转换为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';