可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18

CASE到CASE缩写

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

一些 CASE 表达式 可以转换为 COALESCE, NULLIF, NVL2 或其他 “case 缩写”。

使用 Settings.transformPatternsCaseToCaseAbbreviation,可以实现以下转换

-- With Settings.transformPatternsCaseToCaseAbbreviation active, this:
SELECT
  CASE WHEN x IS NULL THEN y ELSE x END,
  CASE WHEN x = y THEN NULL ELSE x END,
  CASE WHEN x IS NOT NULL THEN y ELSE z END,
  CASE WHEN x IS NULL THEN y ELSE z END,
  CASE WHEN x = 1 THEN y WHEN x = 2 THEN z END,
FROM tab;

-- ... is transformed into the equivalent expression:
SELECT
  NVL(x, y),
  NULLIF(x, y),
  NVL2(x, y, z),
  NVL2(x, z, y),
  CHOOSE(x, y, z)
FROM tab;

涉及到 BOOLEAN 类型时,会出现一些额外的特殊情况

-- With Settings.transformPatternsCaseToCaseAbbreviation active, this:
SELECT
  CASE WHEN x = y THEN TRUE ELSE FALSE END,
  CASE WHEN x = y THEN FALSE ELSE TRUE END,
  CASE x WHEN y THEN TRUE ELSE FALSE END,
  CASE x WHEN y THEN FALSE ELSE TRUE END
FROM tab;

-- ... is transformed into the equivalent expression:
SELECT
  NVL(x = y, FALSE),
  NVL(x <> y, TRUE),
  NVL(x = y, FALSE),
  NVL(x <> y, TRUE)
FROM tab;

反馈

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

The jOOQ Logo