Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment remplacer une valeur séparée par des virgules dans une colonne de table par une valeur d'entrée utilisateur oracle

delete from yourtable t
where
  instr(','||t.col||',', '123') > 0

Vous pouvez remplacer '123' par un paramètre si vous le souhaitez.

Mais une meilleure façon serait de ne pas stocker de valeurs séparées par des virgules et de créer une table de détails à la place. Si vous devez rechercher une valeur spécifique dans une liste séparée par des virgules, vous ne pouvez pas utiliser d'index, entre autres limitations.

[modifier] J'ai mal compris la question. Vous vouliez dire ceci :

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Ajoutez ',' avant et après pour faire correspondre les éléments au début ou à la fin de la valeur.
  • Remplacez par la valeur ',123,' (entre virgules) pour éviter de faire correspondre accidentellement 1234 également.
  • Utilisez substr deux fois pour supprimer le premier et le dernier caractère (les virgules ajoutées)
  • Utilisez instr dans où pour empêcher la mise à jour des enregistrements qui n'ont pas besoin d'être mis à jour (meilleures performances).