mysql在哪里完全匹配

时间:2011-12-20 04:40:54

标签: mysql sql

当我写这个查询时

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 260;

返回

title            city  
---------------  ------
Butterfly world  Mohali

当我写作

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = '260abcxyz';

返回

title            city  
---------------  ------
Butterfly world  Mohali
看到第二个是错的。我想得到的价值仅在ID ID完全匹配...如何解决这个问题。谢谢你的帮助。

4 个答案:

答案 0 :(得分:2)

由于MySql中的类型转换,这种情况正在发生。我的sql对待#260; 260abcxyz'作为查询和AFAIK中的整数,因为第一个字符是数字MySql将其转换为数字,它只变为260,这就是你获得结果的原因。如果你先写字符像#abcxyz260'它将成功进行比较。

此处提供更多说明:Type Conversion in MySql

作为解决方案:你应该注意只比较传递数字而不是字符串和数字的组合。

答案 1 :(得分:2)

好吧,如果idINT,则不应使用引号。 MySQL的作用方式是使用String来比较INT,它只使用start中的有效初始整数。

看到这个:

mysql> desc coupon_detail;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| title | varchar(100) | YES  |     | NULL    |       |
| city  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.04 sec)

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 'ff260';
Empty set, 1 warning (0.00 sec)

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = '260ff';
+-----------------+--------+
| title           | city   |
+-----------------+--------+
| Butterfly world | Mohali |
+-----------------+--------+
1 row in set, 1 warning (0.00 sec)

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 260;
+-----------------+--------+
| title           | city   |
+-----------------+--------+
| Butterfly world | Mohali |
+-----------------+--------+
1 row in set (0.00 sec)

mysql> SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id = 26011;
Empty set (0.00 sec)

这个想法不是混合数字和aphabets来比较INT列。如果必须,您可以考虑

  • 将ID列转换为VARCHAR。在这种情况下,自动增量可能会消失。
  • 具有应用程序逻辑,仅查询具有数字的字符串。

答案 2 :(得分:2)

您可以将id转换为字符串,以便完全进行比较。您可以使用LIKE进行隐式转换

SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id LIKE '260abcxyz';

或替代方案,您可以显式执行演员

SELECT cd.title, cd.city FROM coupon_detail cd WHERE CAST(cd.id AS CHAR) = '260abcxyz';

但是,如果所有ID都是整数,则在尝试查询数据库之前检查这些值可能更合适。 (如果您查询的ID不是数字,则无论如何都不能匹配。)

答案 3 :(得分:0)

使用like而不是因为如果字符串太长而不是完全匹配,那么就不会以这种方式工作 SELECT cd.title, cd.city FROM coupon_detail cd WHERE cd.id LIKE '260abcxyz';