Postgresql
數組到字元串有時會連接更少的值
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
通過執行上述查詢,應該包含由or
status
分隔的 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在這裡