wie kommt man zum Update String-Verkettung in Postgres sql mit vorhandenen Wert

stimmen
0

Ich habe einen Bericht Tabelle mit dem Wert, wie unten gezeigt

id  reportIdList
1   123, 124, 125
2   123, 124, 125
3   123, 124, 125, 127
4   123, 124, 125, 127

Ich brauche Hilfe mit SQL zusätzlichem Mehrwert zu schaffen, wie in

id  reportIdList
1   123, 124, 125, *126*
2   123, 124, 125, *126*
3   123, 124, 125, *126*, 127
4   123, 124, 125, *126*, 127

Im Moment habe ich einen Weg zu Update

update reports set reportIdList = reportIdList || ',126';

Aber dies würde die Tabelle aktualisieren, wie unten dargestellt:

  id  reportIdList

  1   123, 124, 125, *126*
  2   123, 124, 125, *126*
  3   123, 124, 125, 127, *126*
  4   123, 124, 125, 127, *126*

Jede Hilfe ist willkommen, danke

Veröffentlicht am 03/12/2019 um 00:05
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Der einfachste Weg ist eine Funktion erstellen mit Ihrem schlechten Design zu beschäftigen:

create or replace function add_element(p_input text, p_add text)
  returns text
as
$$
  select string_agg(x::text, ','  order by x)
  from (
    select trim(nullif(x,''))
    from unnest(string_to_array(p_input, ',')) as e(x)
    union 
    select p_add
  ) t(x);
$$
language sql;  

Dann können Sie tun:

update the_table
  set reportidlist = add_element(reportidlist, 126);

Aber Sie sollten wirklich Ihr Datenmodell beheben und stoppen Komma getrennt Strings zu speichern.

Beantwortet am 03/12/2019 um 00:16
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more