mysql中与null值不能比较
在mysql中,選擇某field為不等于某值的時候,使用<>符號。但查bug時發現該field為null的并不能查出來。
查原因為:
null值不能與其他值進行比較,只能使用is null或is not null來進行判斷。
所以,限制條件需要寫:
(field is null or field<>VALUE)
這樣才行。
參考鏈接:
http://jingyan.baidu.com/article/9113f81b2adc882b3214c7cb.html
MySql數據庫中null值與其他值的比較
- |
- 瀏覽:2112
- |
- 更新:2013-11-28 11:05
- |
- 標簽:mysql?
百度師傅百度師傅,專治各種手機、電腦問題
數據庫中存在null,那么怎樣查找這些值是null的記錄呢?
工具/原料
-
MySql數據庫
方法/步驟
查找到某一個字段是null的記錄,最簡單的想法可能是這樣:
select *from? tableName where columnName = null
但是這樣是不行的,因為null不能和任何值比較。在SQL中,NULL值與任何其它值的比較(即使是NULL)永遠不會為“真”。包含NULL的表達式總是會導出NULL值,除非在關于操作符的文檔中以及表達式的函數中作了其他規定。
我曾經犯的錯誤如下:
注意,紅色字體的查詢條件只能查詢出pass_name!='batch'且不為null的字段(null不能和任何值比較,即使是null也不會是true),如果需要查詢出pass_name是null的字段,必須顯示的加上:or pass_name is NULL
SELECT COUNT(*) FROM?表名?WHERE FROM_UNIXTIME(submit_time) >= '2012-08-01' AND FROM_UNIXTIME(submit_time) < '2013-07-01' AND?pass_name <> 'test'(錯誤)
查詢出包含null且pass_name!='batch'的數據:
SELECT COUNT(*) FROM 表名 WHERE FROM_UNIXTIME(submit_time) >= '2012-08-01' AND FROM_UNIXTIME(submit_time) < '2013-07-01' AND?(pass_name <> 'test' or pass_name is null)(正確查出pass_name!=null及pass_name是null的)
null表示的含義是未知,即不知道有沒有。和‘’空字符串不等,因為空字符串相當于沒有值。null代表的是不知道有沒有值。所以在數據查詢中如果字段默認值是null,想查詢出不等于某個條件的一定要加上——字段名 is null 或者字段名 is not null來包含是null或者不是null的字段
END注意事項
-
null和任何值都不能比較
-
null只能用is null 或者is not null 來判斷,不能用=或者!=來判斷
總結
以上是生活随笔為你收集整理的mysql中与null值不能比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop put file 错误:f
- 下一篇: Hadoop streaming: Ex