sql >> Base de Datos >  >> RDS >> Oracle

Cómo reemplazar un valor separado por comas en la columna de la tabla con el valor de entrada del usuario Oracle

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

Puede reemplazar '123' con un parámetro si lo desea.

Pero una mejor manera sería no almacenar valores separados por comas y crear una tabla de detalles en su lugar. Si necesita buscar un valor específico dentro de una lista separada por comas, no puede hacer uso de índices, entre otras limitaciones.

[editar] Entendí mal la pregunta. Quisiste decir esto:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Agregue ',' antes y después para hacer coincidir los elementos al principio o al final del valor.
  • Reemplace usando el valor ',123,' (dentro de comas) para evitar coincidencias accidentales con 1234 también.
  • Utilice substr dos veces para eliminar el primer y último carácter (las comas añadidas)
  • Utilice instr en el lugar para evitar la actualización de registros que no necesitan actualizarse (mejor rendimiento).