尝试选择不是0时出现奇怪的结果

时间:2013-11-15 13:39:57

标签: mysql sql

在我的一个表中,我有一个varchar(255)列。 where子句看起来像这个

SELECT ….. WHERE ctd_ref != 0.

如果值是大于零的整数但是没有选择ctd_ref值= N8IJVW

的条目,这样可以正常工作

我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果你将字符串转换为零,几乎所有时间都会得到零,即使你不这样做,我也不认为你得到了你想要的结果:

mysql> select cast('abc' as decimal), cast('' as decimal), cast('7zip' as decimal);
+------------------------+---------------------+-------------------------+
| cast('abc' as decimal) | cast('' as decimal) | cast('7zip' as decimal) |
+------------------------+---------------------+-------------------------+
|                      0 |                   0 |                       7 |
+------------------------+---------------------+-------------------------+
1 row in set, 2 warnings (0.00 sec)

请不要强制进行此类转换,我怀疑您从未打算这样做:

SELECT … WHERE ctd_ref <> '0'

...并且还尝试使用相反的子句进行调试:

SELECT … WHERE ctd_ref = '0'

答案 1 :(得分:0)

如果是varchar尝试WHERE ctd_ref != '0'

如果你把它保留为0,你就是将一个数字与一个字符串字段进行比较,正如你所说,这会给你带来奇怪的结果。