在我的表中有一列是varchar(255)。 where子句看起来像这样奇怪的结果,当试图选择不是0
SELECT ….. WHERE ctd_ref != 0.
嗯,这如果该值是大于零的整数但不会选择具有ctd_ref
值项工作正常= N8IJVW
我做错了吗?
在我的表中有一列是varchar(255)。 where子句看起来像这样奇怪的结果,当试图选择不是0
SELECT ….. WHERE ctd_ref != 0.
嗯,这如果该值是大于零的整数但不会选择具有ctd_ref
值项工作正常= N8IJVW
我做错了吗?
如果你投的字符串到零,你得到零周几乎所有的时间,即使你不,我不认为你得到你想要的结果:
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'
这也是值得注意的是,许多其他DBMS将简单地拒绝这样的比较并抛出一个错误(一个更好的行为恕我直言) –
如果它是一个varchar
尝试WHERE ctd_ref != '0'
如果你把它作为0,你的一些比较字符串字段,它会给你,就像你说的,奇怪的结果。
如果它是一个'varchar'尝试'WHERE ctd_ref =“0''编辑:不妨把它作为一个答案。 –
你的列是一个字符串数据类型...你需要引用你的值“0” – scunliffe
“0”是一个数字,你将它与一个varchar(也称为“比较苹果与橙子”)进行比较。您的列与适当的字符串文字:''0'' –