可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

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 表达式的简短形式,通常以函数的形式。这些包括

排序间接通常使用 SELECTORDER BY 子句的 CASE 子句来实现。有关更多详细信息,请参见手册中关于ORDER BY 子句的部分。

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的反馈!

The jOOQ Logo