Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So ersetzen Sie einen durch Kommas getrennten Wert in einer Tabellenspalte durch ein Benutzereingabewert-Orakel

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

Sie können '123' durch einen Parameter ersetzen, wenn Sie möchten.

Aber ein besserer Weg wäre, keine kommagetrennten Werte zu speichern und stattdessen eine Detailtabelle zu erstellen. Wenn Sie in einer kommagetrennten Liste nach einem bestimmten Wert suchen müssen, können Sie neben anderen Einschränkungen keine Indizes verwenden.

[Bearbeiten]Frage falsch verstanden. Du meintest das:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Fügen Sie ',' vor und nach hinzu, um Elemente am Anfang oder Ende des Werts abzugleichen.
  • Ersetzen Sie durch den Wert ',123,' (innerhalb von Kommas), um zu verhindern, dass versehentlich auch 1234 gefunden wird.
  • Verwenden Sie substr zweimal, um das erste und letzte Zeichen (die hinzugefügten Kommas) zu entfernen
  • Verwenden Sie instr in where, um zu verhindern, dass Datensätze aktualisiert werden, die nicht aktualisiert werden müssen (bessere Leistung).