当我写这个查询时
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完全匹配...如何解决这个问题。谢谢你的帮助。
答案 0 :(得分:2)
由于MySql中的类型转换,这种情况正在发生。我的sql对待#260; 260abcxyz'作为查询和AFAIK中的整数,因为第一个字符是数字MySql将其转换为数字,它只变为260,这就是你获得结果的原因。如果你先写字符像#abcxyz260'它将成功进行比较。
此处提供更多说明:Type Conversion in MySql
作为解决方案:你应该注意只比较传递数字而不是字符串和数字的组合。
答案 1 :(得分:2)
好吧,如果id
为INT
,则不应使用引号。 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列。如果必须,您可以考虑
答案 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';