sql >> Database >  >> RDS >> Oracle

Hoe een door komma's gescheiden waarde in de tabelkolom te vervangen door de gebruikersinvoerwaarde Oracle

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

Je kunt '123' vervangen door een parameter als je wilt.

Maar een betere manier zou zijn om door komma's gescheiden waarden niet op te slaan en in plaats daarvan een detailtabel te maken. Als u binnen een door komma's gescheiden lijst naar een specifieke waarde moet zoeken, kunt u onder andere geen gebruik maken van indices.

[edit] Ik heb de vraag verkeerd begrepen. Je bedoelde dit:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Voeg ',' voor en na toe om items aan het begin of einde van de waarde te matchen.
  • Vervang de waarde ',123' (binnen komma's) om te voorkomen dat ook 1234 per ongeluk overeenkomt.
  • Gebruik substr twee keer om het eerste en laatste teken (de toegevoegde komma's) te verwijderen
  • Gebruik instr in de waar om te voorkomen dat records worden bijgewerkt die niet hoeven te worden bijgewerkt (betere prestaties).


  1. Hoe een tekstveld in meerdere talen op te slaan in mysql met php?

  2. Hoe mysqli uitzonderingen te laten maken met behulp van MYSQLI_REPORT_STRICT?

  3. com.mysql.jdbc.PacketTooBigException java

  4. Kan AspNet.Identity niet configureren met PostgreSQL