具有NULL值的CASE表达式

DaB*_*lue 3 sql select case progress-db openedge

我正在努力了解如何在进度案例表达式中检查空值。我想查看是否存在一列并使用它,如果不使用后备列。例如,威廉的名字将由Bill在fn.special-char中覆盖。

我有以下查询:

SELECT  
"PUB"."NAME"."LAST-NAME" as LastName,
   CASE fn."SPECIAL-CHAR"
     WHEN   is null  THEN "PUB"."NAME"."FIRST-NAME"
     ELSE   fn."SPECIAL-CHAR"
END as FirstName

FROM "PUB"."NAME"  
LEFT OUTER JOIN "PUB"."DAT-DATA" fn on "PUB"."NAME"."NAME-ID" = fn."DAT-SRC-ID" and 11 = fn."FLD-FIELD-ID" 
Run Code Online (Sandbox Code Playgroud)

当我运行查询时,我得到:

ORBC Progress OpenEdge Wire Protocol驱动程序] [OPENEDGE]语法错误SQL语句等于或大约为“,然后为” PUB“。” NAME“。” FIRST-“(10713)

如果我选择*,我会看到一切。它只是不喜欢空白部分。我还可以将when null更改为when'bob',并且它可以工作。

在进度数据库查询中使用空值是否需要做其他事情?

Mur*_*nik 5

case语句(case expression when value then result ...)的简写形式是表达式和​​给定值之间的一系列相等条件的简写形式。null,但是,它不是一个值-它是缺少值,必须is像您尝试做的那样,必须由运算符进行显式评估。为了正确地做到这一点,但是,你需要使用稍长的变化case语法- case when condition then result ...

SELECT  
"PUB"."NAME"."LAST-NAME" as LastName,
   CASE WHEN fn."SPECIAL-CHAR" IS NULL THEN "PUB"."NAME"."FIRST-NAME"
     ELSE   fn."SPECIAL-CHAR"
END as FirstName

FROM "PUB"."NAME"  
LEFT OUTER JOIN "PUB"."DAT-DATA" fn on "PUB"."NAME"."NAME-ID" = fn."DAT-SRC-ID" and 11 = fn."FLD-FIELD-ID" 
Run Code Online (Sandbox Code Playgroud)

  • 进展不是Postgres;) (3认同)
  • “进步”似乎也存在。而且更干净-尤其是当您有多个值要“空”掉时。https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dmsrf%2Fcoalesce.html%23 (2认同)