2013-11-15 42 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,你的一些比較字符串字段,它會給你,就像你說的,奇怪的結果。