在我的表中有一列是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'' –