DATE_FORMAT与字符串和数字进行比较

时间:2019-07-19 11:11:20

标签: mysql

我相信我是一个熟练的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

那么比较如何真正起作用?什么铸成什么?

1 个答案:

答案 0 :(得分:1)

在第一种情况下,实际上DATE_FORMAT返回的字符串似乎根本没有任何强制类型转换。比较如下:

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

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

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

SELECT
    12 >= 11 AND 12 <= 7

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

相关问题