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

时间:2015-05-19 07:02:45

标签: sql oracle case concat

我需要编写一个DB函数来连接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

3 个答案:

答案 0 :(得分:1)

ANSI SQL:

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

答案 1 :(得分:0)

你用空字符串替换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'

答案 2 :(得分:0)

  

如何检查所有四个参数的空值或空值,然后根据非空值连接。

如果您只需要连接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>