Postgres:Concat多列,同时包含空值

时间:2015-01-09 14:38:25

标签: postgresql

我有一个包含四列的表,我需要连接。其中两列包含一些NULL值。

我需要结果包含指示所有四列的分隔符,如下所示:

colA,colB,colC,colD

或者如果一列(此处为colB)为空,

colA,,colC,colD

我似乎找不到干净的方法来做到这一点。我想出的最好的是:

concat_ws(colA, COALESCE(colB, ''), COALESCE(colC, ''), colD, ',')

这感觉很麻烦(特别是因为我需要反复这样做)。还有更好的方法吗?

2 个答案:

答案 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