我正在对postal (type double)
列进行查询。
SELECT * FROM `table` WHERE `postal` LIKE 'abcdef'; # returns 1 record
使用=的相同查询返回100多条记录。
SELECT * FROM `table` WHERE `postal` = 'abcdef'; # returns 107 record
可能是什么原因?
答案 0 :(得分:1)
您在LIKE
字段上使用DOUBLE
,不应该这样做。
LIKE
保留用于字符串上的模式匹配。使用=
表示数字,或者先使用CONVERT
将数字转换为字符串,然后将逻辑应用于LIKE
。
答案 1 :(得分:0)
=
比较两个身份值。
LIKE
用于模式匹配,即。也就是说,它将字符串值与包含通配符的模式字符串进行匹配。
参考here
答案 2 :(得分:0)
LIKE
会检查并返回类似的值,而=
会检查确切的值。
答案 3 :(得分:0)
以下因素会影响结果(不是完整列表!)
LIKE
运算符在每种情况下都会发生隐式转换:MySQL尝试将值转换为通用数据类型。在第一种情况下,'abcdef'
案例将转换为double
,结果为0
。这就是为什么在与equals(=)比较时得到107条记录。
SELECT * FROM `table` WHERE `postal` = 'abcdef'; # returns 107 record
您应该通过运行
获得完全相同的结果SELECT * FROM `table` WHERE `postal` = 0;
在MySQL中,允许在数字表达式上使用LIKE。 (这是标准SQL LIKE的扩展。)
这意味着允许SELECT CASE WHEN 10 LIKE '1%' THEN 1 ELSE 0 END
并且结果为1(匹配)
老实说,我不确定哪个double值可以与LIKE运算符匹配,格式为'abcdef'。