Ich habe versucht, fehlerhafte Daten in Postgres DB zu korrigieren, wo Foto-Tags zweimal angehängt werden.Postgres: Entfernen des zweiten Vorkommens einer Zeichenkette
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>
Wie Sie in der Zeichenfolge sehen können, Foto-Tags wurden bereits aufgenommen, aber sie waren auf den Text wieder angehängt. Ich möchte das zweite Vorkommen entfernen:. Das erste Vorkommen hat eine bestimmte Reihenfolge und ich möchte sie behalten.
Ich schrieb eine Funktion, die eine RegexMuster konstruieren könnte:
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 $$;
Dies ist das zweite Auftreten eines bestimmten Foto-Tag erfasst. Dann verwende ich regex_replace, um das zweite Vorkommen zu ersetzen: update t_ddtrip_content setze content = regexp_replace (Inhalt, dd_trip_photo_tags (332761), '') von t_ddtrip_content wo tag_id = 332761;
Es würde jedoch alle übereinstimmenden Tags entfernen. Ich habe tagelang online nachgeschaut, konnte aber immer noch keine Lösung finden. Schätze jede Hilfe.