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).