sql之在oracle中连接值

小虾米 阅读:28 2025-02-15 21:57:57 评论:0

我必须像 a-b-c 一样使用“-”连接 a、b、c 列。如果 a 或 b 或 c 为空,则我们不应考虑此列值。

例子:

select A,B,C, 
case  
  when A is not null and B is not null and C is not null then 
  A ||'-'||B ||'-'|| C 
  when A is not null and B is not null then  
A||'-'||B 
when A is not null and C is not null then  
A||'-'||C 
when B is not null and C is not null then  
B||'-'||C 
when A is null and B is null and C is not null then  
C 
when A is null and C is null and B is not null  then  
B 
when B is null and C is null and A is not null then  
A 
end 
  TEXT from 
table1 

请建议我们能否以其他方式实现此逻辑

请您参考如下方法:

你不必把它弄得那么复杂。 NULL 无论如何都会被隐式处理并且不会被考虑,您只需要处理用于连接字符串的定界符。 TRIM 应该可以完成这项工作。

SQL> WITH DATA AS( 
  2  SELECT 1 A, 2 b, 3 c FROM dual UNION ALL 
  3  SELECT NULL A, NULL b, NULL c FROM dual UNION ALL 
  4  SELECT 1 A, NULL b, NULL c FROM dual UNION ALL 
  5  SELECT 1 A, 2 b, NULL c FROM dual 
  6  ) 
  7  SELECT TRIM(both '-' FROM A||'-'||b||'-'||c) str FROM DATA; 
 
STR 
---------------------------------------------------------------- 
1-2-3 
 
1 
1-2 
 
SQL> 

如果您想排除 NULL 值,请向谓词添加一个 NOT NULL 过滤器。

SQL> WITH DATA AS( 
  2  SELECT 1 A, 2 b, 3 c FROM dual UNION ALL 
  3  SELECT NULL A, NULL b, NULL c FROM dual UNION ALL 
  4  SELECT 1 A, NULL b, NULL c FROM dual UNION ALL 
  5  SELECT 1 A, 2 b, NULL c FROM dual 
  6  ) 
  7  SELECT str 
  8  FROM 
  9    ( SELECT TRIM(BOTH '-' FROM A||'-'||b||'-'||c) str FROM DATA 
 10    ) 
 11  WHERE str IS NOT NULL; 
 
STR 
------------------------------------------------------------------- 
1-2-3 
1 
1-2 
 
SQL> 

更新当中间列为 NULL 且其他列不为空时的大小写。

SQL> WITH DATA AS( 
  2  SELECT 1 A, 2 b, 3 c FROM dual UNION ALL 
  3  SELECT NULL A, NULL b, NULL c FROM dual UNION ALL 
  4  SELECT 1 A, NULL b, NULL c FROM dual UNION ALL 
  5  SELECT 1 A, 2 b, NULL c FROM dual UNION ALL 
  6  SELECT 1 A, NULL b, 3 c FROM dual 
  7  ) 
  8  SELECT REPLACE(str, '--', '-') str 
  9  FROM 
 10    ( SELECT TRIM(BOTH '-' FROM A||'-'||b||'-'||c) str FROM DATA 
 11    ) 
 12  WHERE str IS NOT NULL; 
 
STR 
------------------------------------------------------------------- 
1-2-3 
1 
1-2 
1-3 
 
SQL> 


标签:oracle
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号