具有 NULL 值的 CASE 表达式
CASE expression with NULL value
我很难理解如何检查进度案例表达式中的空值。我想查看一个列是否存在并使用它,如果不存在则使用后备列。例如,William 的名字将被 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"
当我 运行 查询时,我得到:
ORBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error SQL statement at or about "is null then "PUB"."NAME"."FIRST-" (10713)
如果我做 select * 我会看到一切。它只是不喜欢 null 部分。我还可以将 when is null 更改为 when 'bob' 并且它有效。
要在进度数据库查询中使用空值,我需要做些什么不同的事情吗?
您可以使用 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"
case
语句 (case expression when value then result ...
) 的 shorthand 变体是 shorthand 表达式和给定值之间的一系列相等条件。但是,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"
我很难理解如何检查进度案例表达式中的空值。我想查看一个列是否存在并使用它,如果不存在则使用后备列。例如,William 的名字将被 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"
当我 运行 查询时,我得到:
ORBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error SQL statement at or about "is null then "PUB"."NAME"."FIRST-" (10713)
如果我做 select * 我会看到一切。它只是不喜欢 null 部分。我还可以将 when is null 更改为 when 'bob' 并且它有效。
要在进度数据库查询中使用空值,我需要做些什么不同的事情吗?
您可以使用 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"
case
语句 (case expression when value then result ...
) 的 shorthand 变体是 shorthand 表达式和给定值之间的一系列相等条件。但是,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"