【发布时间】:2017-07-07 07:01:51
【问题描述】:
我试图修复 postgres 数据库中的错误数据,其中照片标签被附加了两次。
The trip is wonderful.<photo=2-1-1601981-7-1.jpg><photo=2-1-1601981-5-2.jpg>We enjoyed it very much.<photo=2-1-1601981-5-2.jpg><photo=2-1-1601981-7-1.jpg>
正如您在字符串中看到的,照片标签已添加,但它们再次附加到文本中。我想删除第二次出现: .第一次出现有一定的顺序,我想保留它们。
我写了一个可以构造正则表达式模式的函数:
CREATE OR REPLACE FUNCTION dd_trip_photo_tags(tagId int) RETURNS text
LANGUAGE sql IMMUTABLE
AS $$
SELECT string_agg(concat('<photo=',media_name,'>.*?(<photo=',media_name,'>)'),'|') FROM t_ddtrip_media WHERE tag_id=tagId $$;
这会捕获某个照片标签的第二次出现。 然后,我使用 regex_replace 替换第二次出现: update t_ddtrip_content set content = regexp_replace(content,dd_trip_photo_tags(332761),'') from t_ddtrip_content where tag_id=332761;
然而,它会删除所有匹配的标签。我在网上查了几天,但仍然无法找到解决此问题的方法。感谢任何帮助。
【问题讨论】:
标签: regex postgresql replace