簡體   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