簡單CASE WHEN函數:
CASE SCORE WHEN 'A' THEN '優' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END
等同於,使用CASE WHEN條件表達式函數實現:
CASE WHEN SCORE = 'A' THEN '優' WHEN SCORE = 'B' THEN '良' WHEN SCORE = 'C' THEN '中' ELSE '不及格' END
THEN后邊的值與ELSE后邊的值類型應一致,否則會報錯。如下:
CASE SCORE WHEN 'A' THEN '優' ELSE 0 END
'優'和0數據類型不一致則報錯:
[Err] ORA-00932: 數據類型不一致: 應為 CHAR, 但卻獲得 NUMBER
簡單CASE WHEN函數只能應對一些簡單的業務場景,而CASE WHEN條件表達式的寫法則更加靈活。
CASE WHEN條件表達式函數:類似JAVA中的IF ELSE語句。
CASE WHEN condition THEN result [WHEN...THEN...] ELSE result END
condition是一個返回布爾類型的表達式,如果表達式返回true,則整個函數返回相應result的值,如果表達式皆為false,則返回ElSE后result的值,如果省略了ELSE子句,則返回NULL。
下面介紹幾種常用場景。
場景1:有分數score,score<60返回不及格,score>=60返回及格,score>=80返回優秀
SELECT STUDENT_NAME, (CASE WHEN score < 60 THEN '不及格' WHEN score >= 60 AND score < 80 THEN '及格' WHEN score >= 80 THEN '優秀' ELSE '異常' END) AS REMARK FROM TABLE
注意:如果你想判斷score是否null的情況,WHEN score = null THEN '缺席考試',這是一種錯誤的寫法,正確的寫法應為:
CASE WHEN score IS NULL THEN '缺席考試' ELSE '正常' END