我需要编写一个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
答案 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>