2017-02-17 8 views
0

写真タグが2回追加されたpostgres DBで不良データを修正しようとしました。Postgres:文字列の2番目の文字列を削除します。

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>

あなたが文字列で見ることができるように、写真のタグは既に追加されましたが、それらは再びテキストに追加されました。私は2番目の出現を取り除きたい:。最初の出現には特定の順序があり、それらを保持したい。

私は正規表現パターンを構築することができ機能を書いた:

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のを使用:TAG_IDは= 332761 t_ddtrip_contentから 更新t_ddtrip_contentセット内容= REGEXP_REPLACE(コンテンツ、dd_trip_photo_tags(332761)を、 '')。

ただし、一致するタグはすべて削除されます。私は数日間オンラインで検索しましたが、これを修正する方法を見つけられませんでした。助けをお待ちしています。

答えて

0

これは動作するはずです。

正規表現1:

<photo=.+?> 

参照:https://regex101.com/r/thHmlq/1

正規表現2:

<.+?> 

参照:https://regex101.com/r/thHmlq/2

入力:

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> 

出力:

<photo=2-1-1601981-7-1.jpg> 
<photo=2-1-1601981-5-2.jpg> 
<photo=2-1-1601981-5-2.jpg> 
<photo=2-1-1601981-7-1.jpg> 
関連する問題