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 子句
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!