MySQL中的case when有用两种用法,说明如下:

用法一:

CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END

例如:

CASE SCORE 
WHEN 'A' THEN '优' 
ELSE '不及格' 
END

THEN后边的值与ELSE后边的值类型应一致,否则会报错
如下:
CASE SCORE WHEN ‘A’ THEN ‘优’ ELSE 0 END’优’和0数据类型不一致则报错:
[Err] ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER

简单CASE WHEN函数只能应对一些简单的业务场景,而CASE WHEN条件表达式的写法则更加灵活。

也可以使用if函数替代:


# 使用 IF 函数进行替换
IF(SCORE = 'A', '优', '不及格')

用法二:

CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END

例如:

CASE 
WHEN SCORE = 'A' THEN '优'
WHEN SCORE = 'B' THEN '良'
WHEN SCORE = 'C' THEN '中' 
ELSE '不及格'
END

同等于:

# 等同于
CASE score
    WHEN 'A' THEN '优'
    WHEN 'B' THEN '良'
    WHEN 'C' THEN '中'
    ELSE '不及格'
END

condition是一个返回布尔类型的表达式,

如果表达式返回true,则整个函数返回相应result的值,

如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL。