Oracle
 sql >> Database >  >> RDS >> Oracle

Come sostituire un valore separato da virgole nella colonna della tabella con il valore di input dell'utente Oracle

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

Se lo desideri, puoi sostituire '123' con un parametro.

Ma un modo migliore sarebbe non memorizzare valori separati da virgole e creare invece una tabella dei dettagli. Se devi cercare un valore specifico all'interno di un elenco separato da virgole, non puoi utilizzare gli indici, tra le altre limitazioni.

[modifica]Ho frainteso la domanda. Intendevi questo:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Aggiungi ',' prima e dopo per abbinare gli elementi all'inizio o alla fine del valore.
  • Sostituisci utilizzando il valore ',123,' (tra virgole) per evitare che anche 1234 corrisponda accidentalmente.
  • Usa substr due volte per rimuovere il primo e l'ultimo carattere (le virgole aggiunte)
  • Utilizzare instr in the where per impedire l'aggiornamento dei record che non devono essere aggiornati (prestazioni migliori).