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

Sådan erstattes en kommasepareret værdi i tabelkolonnen med brugerinputværdien oracle

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

Du kan erstatte '123' med en parameter, hvis du vil.

Men en bedre måde ville være ikke at gemme kommaseparerede værdier og i stedet oprette en detaljetabel. Hvis du har brug for at lede efter en bestemt værdi inden for en kommasepareret liste, kan du ikke gøre brug af indekser, blandt andre begrænsninger.

[edit] Misforstod spørgsmålet. Du mente dette:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Tilføj ',' før og efter for at matche elementer i begyndelsen eller slutningen af ​​værdien.
  • Erstat med værdien ',123,' (inden for kommaer) for at forhindre, at 1234 også matches ved et uheld.
  • Brug substr to gange for at fjerne det første og sidste tegn (de tilføjede kommaer)
  • Brug instr i hvor for at forhindre opdatering af poster, der ikke skal opdateres (bedre ydeevne).


  1. Sådan fejlfinder du Java Stored Procedures i Oracle

  2. Udpak nøgle, værdi fra json-objekter i Postgres

  3. Får fejl ORA-00909:ugyldigt antal argumenter

  4. Forbindelsespooling med Pgbouncer på PostgreSQL 9.0