mysql IFNULL IF


    假設有一數據表的狀態字段設計爲varchar類型,有以下值:NULL,pending,refund,cancel. 我們知道查詢狀態爲cancel的訂單,SQL語句可以這樣寫:SELECT * FROM qorder WHERE status = 'cancel' SQL語句能查詢出正確的數據,但是當我們想查詢狀態爲非cancel的訂單時,可能會出麻煩, 因爲status字段沒 有設置NOT NULL,所以大部分訂單的status值都是NULL,這樣的話,用'<>'查詢出來的數據不正確,只有status除了cancel之外的非空數據查詢出來了,而爲NULL的沒有查詢出來。

        SELECT * WHERE status <>'cancel' 原 因:NULL值操作 NULL值可能令人感到奇怪直到你習慣它。概念上,NULL意味着“沒有值”或“未知值”,且它被看作與衆不同的值。爲了測試NULL,你不能使用算術比較 操作符例如=、<或!=。爲了說明它,試試下列查詢:mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; 
    +----------+-----------+----------+----------+ 
    | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | 
    +----------+-----------+----------+----------+ 
    | NULL | NULL | NULL | NULL | 
    +----------+-----------+----------+----------+ 
很 顯然你不能通過這些比較得到有意義的結果。

相反使用IS NULL和IS NOT NULL操作符:mysql> SELECT 1 IS NULL, 1 IS NOT NULL; 
+-----------+---------------+ 
| 1 IS NULL | 1 IS NOT NULL | 
+-----------+---------------+ 
| 0 | 1 | 
+-----------+---------------+ 
請注意在MySQL中,0或 NULL意味着假,而其它值意味着真。布爾運算的默認真值是1。根據以上的NULL值操作結果,最終使用此種方式解決:SELECT *qorder  WHERE IFNULL(status,'pending') <>'cancel'

IFNULL(expr1,expr2) 

如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2。IFNULL()返回一個數字或字符串值,取決於它被使 用的上下文環境。 

複製代碼代碼如下:


mysql> select IFNULL(1,0); ->1 
mysql> select IFNULL(0,10); ->0 
mysql> select IFNULL(1/0,10); ->10.0000 
mysql> select IFNULL(1/0,'yes'); ->'yes'IF(expr1,expr2,expr3)如果expr1是TRUE(expr1<>0且expr1<>NULL),那麼IF()返回 expr2,否則它返回expr3。IF()返回一個數字或字符串值,取決於它被使用的上下文。 
mysql> select IF(1>2,2,3); -> 3 
mysql> select IF(1<2,'yes','no'); -> 'yes' 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章