postgreSQL用元素前缀替换字符串列表



在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-手册的这一部分介绍了阵列和使用阵列的操作。

最新更新