Postgresql

數組到字元串有時會連接更少的值

  • January 8, 2018
array_to_string(array_agg(array_to_string(array[
           highlights,exceptions,inter_note,inter_status::text
          ,comp_note,comp_status::text,hard_note,hard_status::text]
       ,'|#|'::text))
    ,'|*|'::text) as status

通過執行上述查詢,應該包含由orstatus分隔的 8 個值。但在某些情況下,它只返回 3、4 或 6 個值。我需要在記錄是否為空時獲取所有 8 個值。|#|``|*|

例子:

原始數組:[|#||#||#||#|Complete|#||#|Undefined|#||#|Undefined]

一些案例:[|#||#||#|PASS|#|Complete|#|Undefined|#|Undefined]

另一個案例:[Complete|#|Undefined|#|Undefined]

知道為什麼缺少一些數組元素嗎?

使用COALESCE確保每個欄位都有預設值。

create table t (highlights varchar(10), 
                exceptions varchar(10), 
                inter_note varchar(10),
                inter_status int,
                comp_note varchar(10), 
                comp_status int,
                hard_note varchar(10),
                hard_status int);

insert into t values ('a','b','c',1,'d',2,'e',3),('',null,'f',4,null,5,'g',null);
✓

2 行受影響
select array_to_string(
         array_agg(
           array_to_string(
             array[coalesce(highlights, ''),
                   coalesce(exceptions, ''),
                   coalesce(inter_note,inter_status::text, ''),
                   coalesce(comp_note, ''),
                   coalesce(comp_status::text, ''),
                   coalesce(hard_note, ''),
                   coalesce(hard_status::text, '')],'|#|'::text)),'|*|'::text) as status
from   t;
| 狀態 |
| :------------------------------------------------ |
| a|#|b|#|c|#|d|#|2|#|e|#|3|*||#||#|f|#||#|5|#|g|#| |

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/194870