[英]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.