在我的一个表中,我有一个varchar(255)列。 where子句看起来像这个
SELECT ….. WHERE ctd_ref != 0.
如果值是大于零的整数但是没有选择ctd_ref
值= N8IJVW
我做错了什么?
答案 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,你就是将一个数字与一个字符串字段进行比较,正如你所说,这会给你带来奇怪的结果。