IF 和 CASE...WHEN

IF 用法

语法:

1
IF( expr1 , expr2 , expr3 )

expr1 的值为 TRUE,则返回值为 expr2
expr1 的值为 FALSE,则返回值为 expr3

CASE..WHEN

CASE..WHEN 可以实现条件处理,它有两种语法格式:

语法一:

1
2
3
4
5
6
CASE expression
WHEN expression_1 THEN expression_1
...
WHEN expression_n THEN expression_n
[ELSE expression_m]
END

将 expression 的值与各 WHEN 子句中的表达式的值进行比较,如果两者相等,则返回 THEN 后的表达式的值,然后跳出CASE 语句,否则返回 ELSE 子句中的表达式的值。

如果所有比较失败时,CASE 语句将返回 NULL。

语法二:

1
2
3
4
5
6
CASE 
WHEN expression_1 THEN expression_1
...
WHEN expression_n THEN expression_n
[ELSE expression_m]
END

依次测试 WHEN 后的条件表达式的值,如果其值为真,则返回 THEN 后面的表达式的值,否则测试下一个 WHEN 子句中的表达式的值,如果所有 WHEN 子句后的表达式的值都为假,则返回 ELSE 后的表达式的值。

如果所有比较失败时,则 CASE 表达式返回 NULL。

例如:

1
2
3
4
5
6
7
8
SELECT 
CASE
WHEN id = (select count(*) from seat) AND id % 2 = 1 THEN id
WHEN id % 2 = 1 THEN id+1
WHEN id % 2 = 0 THEN id-1
END as id, student
FROM seat
ORDER BY id