清理postgresql中损坏的逗号分隔数据

fykwrbwg  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(99)

我有一个名为entity的表,它有一列lsofsubentity,列中有逗号分隔的值。
例如,如果实体A具有3个子实体(B,C,D),则它将在该列中具有类似B,C,D的数据。
但是由于代码中的一些逻辑问题,内部数据被破坏,它具有像B、、、、C、D这样的值。这是因为当你从实体中取消分配子实体时,它只删除了它没有删除的id,沿着它。
有人可以帮助我,我如何才能消除额外的,在这个值?.
我试着阅读很多文章,其中使用了unnest string_to_array,然后从array中删除null,然后再次将其转换为array_to_string,但我无法做到这一点。

lyfkaqu1

lyfkaqu11#

我只需要使用RegEx来清理字段:

UPDATE some_table
SET some_field = regexp_replace(some_field, '(^,+)|(,+$)|((?<=,),)', '', 'g');

RegEx有三个部分:

  • 删除字符串开头的所有逗号。
  • 删除字符串末尾的所有逗号。
  • 删除逗号后的任何逗号。

有可能其他人的RegEx foo比我更强大,因此可以简化RegEx -但这应该可以工作。
PS我建议你先做一个选择,只是为了在更新之前检查值是否正确:

SELECT some_field, regexp_replace(some_field, '(^,+)|(,+$)|((?<=,),)', '', 'g')
FROM some_table;

相关问题