我有一个包含四列的表,我需要连接。其中两列包含一些NULL值。
我需要结果包含指示所有四列的分隔符,如下所示:
colA,colB,colC,colD
或者如果一列(此处为colB)为空,
colA,,colC,colD
我似乎找不到干净的方法来做到这一点。我想出的最好的是:
concat_ws(colA, COALESCE(colB, ''), COALESCE(colC, ''), colD, ',')
这感觉很麻烦(特别是因为我需要反复这样做)。还有更好的方法吗?
答案 0 :(得分:2)
由于最终值不能为NULL,因此您不必担心保留它们。只需使用空字符串。这就是您在标准SQL中编写它的方法。
select coalesce(cola, '') || ', ' ||
coalesce(colb, '') || ', ' ||
coalesce(colc, '') || ', ' ||
coalesce(cold, '')
from your_table_name;
concat_ws()函数不会跳过空字符串,但它 跳过空列。这意味着您仍然必须使用coalesce()。
select concat_ws(', ', coalesce(cola, ''),
coalesce(colb, ''),
coalesce(colc, ''),
coalesce(colb, ''))
from your_table_name;
答案 1 :(得分:-2)
我认为你应该使用游标然后使用循环,为了显示空值,你必须使用nvl()函数,如下所示:
程序TODO是 VARAAR2中的vAux; CURSOR CUR_TEST IN SELECT NVL(colb,' replace_with'),colA,colD 来自双重; 开始 对于CUR_TEST循环中的x vAux:= x.colb ||',' || x.colA ||',' || x.colD; 结束循环;
结束TODO;
用于检查nvl()的作用:http://www.techonthenet.com/oracle/functions/nvl.php