在Postgres中,我有一个表,其中有一列是文本列表:
devdb=> d txyz
Table "public.txyz"
Column | Type | Collation | Nullable | Default
---------------+--------+-----------+----------+---------
status | text | | |
lstcol | text[] | | |
CCD_ 1包含
devdb=> select lstcol from txyz limit 1 ;
lstcol
----------------------------------------------------------------------
{"ABCD - Company One Ltd","EFG - Second Corp."}
我想用" - "
之前的单词替换列表中包含的每个元素,从而获得
{"ABCD","EFG"}
我怎样才能做到这一点?可以创建另一列,然后替换原始列。
我的SQL不是一流的,这个项目有很多。任何帮助都将不胜感激。非常感谢
您可以更新现有的表(即转换现有的列内容(,如下所示:
update txyz
set lstcol = (select array_agg(trim(split_part(s, '-', 1))) from unnest(lstcol) s);
并且在那之后对vacuum
表txyz将是有益的。
一种方法是横向连接,它将数组拉开,挑选出您想要的片段,然后重新聚合:
select t.*, x.ar
from txyz t cross join lateral
(select array_agg(split_part(col, ' - ', 1)) as ar
from unnest(t.lstcol) col
) x;
这里有一个db<gt;不停摆弄
你应该在它的官方网站上阅读Postgres的官方文档。https://www.postgresql.org/docs/13/arrays.html-手册的这一部分介绍了阵列和使用阵列的操作。