我相信我是一个熟练的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
那么比较如何真正起作用?什么铸成什么?
答案 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
这是错误的,这是使用实际数字对这些不等式的预期行为。