我相信我是一个熟练的 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
那么比较到底是如何进行的呢?什么被转换到什么?
最佳答案
在第一种情况下,实际上根本没有任何转换,因为 DATE_FORMAT
返回一个字符串。进行的比较是:
SELECT
'12' >= '11' AND '12' <= '7' AS str
确实如此,因为文本 '12'
按字典顺序大于 '11'
和 '12'
也比 '7'
“小于”,因为前者以 1
开头。
在第二种情况下,不等式的右侧是整数,MySQL 将左侧的文本数字转换为整数来进行比较:
SELECT
12 >= 11 AND 12 <= 7
这是错误的,这是使用实际数字的这些不等式的预期行为。
关于mysql - DATE_FORMAT 与字符串和数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111272/