la mise à jour concaténation de chaînes dans Postgres SQL avec valeur existante

voix
0

J'ai une table de rapports avec la valeur comme indiqué ci-dessous

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

J'ai besoin d'aide avec sql pour ajouter de la valeur supplémentaire dans

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

À l'heure actuelle, j'ai un moyen de mise à jour

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

Mais cela mettra à jour la table ci-dessous:

  id  reportIdList

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

Toute aide est la bienvenue, merci

Créé 03/12/2019 à 00:05
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

La meilleure façon est de créer une fonction pour traiter votre mauvaise conception:

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;  

Ensuite, vous pouvez faire:

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

Mais vous devriez vraiment fixer votre modèle de données et de stockage séparées par des virgules arrêter les chaînes.

Créé 03/12/2019 à 00:16
source utilisateur

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