CASE 使用 CASE 语句检查 Null 或 Empty 值

CASE Using CASE Statements to check for Null or Empty value

我需要编写一个数据库函数来连接 4 个值。这些值可以为空或 null。如何仅连接非空或非空的值?

伪代码

CASE
WHEN #p1 IS NULL THEN
  ''
ELSE
  #p1
END ||
CASE
WHEN #p2 IS NULL THEN
  ''
ELSE
  #p2
END ||
CASE
WHEN #p3 IS NULL THEN
  ''
ELSE
  #p3
END ||
CASE
WHEN #p4 IS NULL THEN
  ''
ELSE
  #p4
END

## End

ANSI SQL:

coalesce(#p1,'') || coalesce(#p2,'') || coalesce(#p3,'') || coalesce(#p4,'')

您要用空字符串替换 null 吗?在 Oracle 中,null 和空字符串是一回事。您不需要根据 null 做出任何决定。

所以,您可以:

expr:= p1||p2||p3||p4;

例如如果

p1 = 'a';
p2 is null;
p3 = 'b';
p4 is null;

expr p1||p2||p3||p4 将是 'ab'.

How can i check for null or empty values for all the four parameters and then concatenate based on what is not null.

如果您只需要连接 NOT NULL 值,那么只需 连接 它们即可。因为 NULL 值无论如何都会被忽略。

#p1||#p2||#p3||#p4 

例如,

SQL> WITH t(A, b, c, d) AS(
  2  SELECT 'x', NULL, 'y', NULL FROM dual UNION ALL
  3  SELECT 'x', '', NULL, 'z' FROM dual UNION ALL
  4  SELECT NULL, NULL, 'x', NULL FROM dual
  5  )
  6  SELECT a||b||c||d stra FROM t;

STR
---
xy
xz
x

SQL>