2013-11-15 41 views
-1

在我的表中有一列是varchar(255)。 where子句看起来像这样奇怪的结果,当试图选择不是0

SELECT ….. WHERE ctd_ref != 0. 

嗯,这如果该值是大于零的整数但不会选择具有ctd_ref值项工作正常= N8IJVW

我做错了吗?

+2

如果它是一个'varchar'尝试'WHERE ctd_ref =“0''编辑:不妨把它作为一个答案。 –

+0

你的列是一个字符串数据类型...你需要引用你的值“0” – scunliffe

+0

“0”是一个数字,你将它与一个varchar(也称为“比较苹果与橙子”)进行比较。您的列与适当的字符串文字:''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' 
+0

这也是值得注意的是,许多其他DBMS将简单地拒绝这样的比较并抛出一个错误(一个更好的行为恕我直言) –

0

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

如果你把它作为0,你的一些比较字符串字段,它会给你,就像你说的,奇怪的结果。