=和LIKE有什么区别

时间:2015-01-16 07:52:25

标签: mysql

我正在对postal (type double)列进行查询。

SELECT * FROM `table` WHERE `postal` LIKE 'abcdef'; # returns 1 record

使用=的相同查询返回100多条记录。

SELECT * FROM `table` WHERE `postal` = 'abcdef'; # returns 107 record

可能是什么原因?

4 个答案:

答案 0 :(得分:1)

您在LIKE字段上使用DOUBLE,不应该这样做。

LIKE保留用于字符串上的模式匹配。使用=表示数字,或者先使用CONVERT将数字转换为字符串,然后将逻辑应用于LIKE

答案 1 :(得分:0)

=比较两个身份值。 LIKE用于模式匹配,即。也就是说,它将字符串值与包含通配符的模式字符串进行匹配。

参考here

答案 2 :(得分:0)

LIKE会检查并返回类似的值,而=会检查确切的值。

答案 3 :(得分:0)

以下因素会影响结果(不是完整列表!)

  • 隐性对话
  • MySQL扩展到标准SQL的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'。