CASE表达式
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
CASE
表达式是标准 SQL 语法的一部分。虽然一些 RDBMS 也提供 IF
表达式或 DECODE
函数,但您始终可以依赖两种类型的 CASE
语法
SELECT -- Searched case CASE WHEN AUTHOR.FIRST_NAME = 'Paulo' THEN 'brazilian' WHEN AUTHOR.FIRST_NAME = 'George' THEN 'english' ELSE 'unknown' END, -- Simple case CASE AUTHOR.FIRST_NAME WHEN 'Paulo' THEN 'brazilian' WHEN 'George' THEN 'english' ELSE 'unknown' END FROM AUTHOR
create.select( // Searched case when(AUTHOR.FIRST_NAME.eq("Paulo"), "brazilian") .when(AUTHOR.FIRST_NAME.eq("George"), "english") .otherwise("unknown"); // Simple case choose(AUTHOR.FIRST_NAME) .when("Paulo", "brazilian") .when("George", "english") .otherwise("unknown")) .from(AUTHOR) .fetch();
在 jOOQ 中,两种语法都支持(第二种在 Derby 中被模拟,Derby 只知道第一种)。不幸的是,case 和 else 都是 Java 中的保留字。 jOOQ 选择使用 Oracle DECODE
函数中的 decode(),或者 choose()
/ case_()
和 otherwise()
/ else_()
。
CASE
表达式可以用在可以放置列表达式(或 Field)的任何地方。例如,如果您从 AUTHOR
中选择,则可以 SELECT
上述表达式
SELECT AUTHOR.FIRST_NAME, [... CASE EXPR ...] AS nationality FROM AUTHOR
CASE 表达式的简短形式
SQL 标准和一些供应商支持多种 CASE
表达式的简短形式,通常以函数的形式。这些包括
排序间接通常使用 SELECT
的 ORDER BY
子句的 CASE
子句来实现。有关更多详细信息,请参见手册中关于ORDER BY 子句的部分。
引用此页
- SQL 方言
- ORDER BY 子句中的 NULL 处理
- 在 ORDER BY 中使用 CASE 表达式进行排序间接引用
- WHEN MATCHED AND ..
- WHEN NOT MATCHED AND ..
- CHOOSE
- DECODE
- IIF
- NVL2
- 使用 FILTER 聚合组数据的子集
- 条件表达式
- 基于模式的转换:CASE searched 到 CASE simple
- 基于模式的转换:CASE 到 CASE 缩写
- 基于模式的转换:CASE with DISTINCT FROM to DECODE
- 基于模式的转换:CASE with ELSE NULL
- 基于模式的转换:扁平化 CASE
- 基于模式的转换:合并 CASE .. WHEN 和 ELSE 子句
- 基于模式的转换:合并 CASE .. WHEN 子句
- 基于模式的转换:简单的 CASE 缩写
- 基于模式的转换:不可达的 CASE 子句
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!