首页 > 解决方案 > DATE_FORMAT 与字符串和数字进行比较

问题描述

我相信我是一个熟练的 mysql 用户,但显然我不是。

我以为 mysql 会在比较之前进行转换,但是这个查询让我感到困惑:

SELECT
  DATE_FORMAT('2019-07-19 12:05:12', '%H') >= '11' AND DATE_FORMAT('2019-07-19 12:05:12', '%H') <= '7' AS 'str',
  DATE_FORMAT('2019-07-19 12:05:12', '%H') >= 11 AND DATE_FORMAT('2019-07-19 12:05:12', '%H') <= 7 AS 'num';

   str     num  
------  --------
     1         0

那么比较是如何真正起作用的呢?什么被铸造成什么?

标签: mysql

解决方案


在第一种情况下,这里实际上似乎根本没有任何转换,因为DATE_FORMAT返回一个字符串。正在进行的比较是:

SELECT
    '12' >= '11' AND '12' <= '7' AS str

这是真的,因为文本 '12'在字典上大于'11',并且'12'也“小于”,'7'因为前者以 开头1

在第二种情况下,不等式的 RHS 是整数,MySQL 将 LHS 上的文本数字转换为整数以进行比较:

SELECT
    12 >= 11 AND 12 <= 7

这是错误的,这是使用实际数字的这些不等式的预期行为。


推荐阅读