繁体   English   中英

带有NULL值的CASE表达式

[英]CASE expression with NULL value

我很难理解如何在进度案例表达式中检查空值。 我想查看列是否存在并使用它,如果不使用回退列。 例如,名字中的威廉将由比尔在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" 

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

ORBC Progress OpenEdge Wire Protocol驱动程序] [OPENEDGE]语法错误SQL语句处于或关于“is null然后”PUB“。”NAME“。”FIRST-“(10713)

如果我选择*我会看到一切。 它只是不喜欢null部分。 我也可以将when为null时更改为'bob'并且它有效。

在进度数据库查询中使用空值是否需要做些什么?

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" 

您可以在Progress 4GL中使用IFNULL函数代替CASE

SELECT  
"PUB"."NAME"."LAST-NAME" as LastName,
   IFNULL(fn."SPECIAL-CHAR", "PUB"."NAME"."FIRST-NAME") 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" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM