sql >> Databasteknik >  >> RDS >> Oracle

Hur man ersätter ett kommaseparerat värde i tabellkolumnen med användarinmatningsvärdet oracle

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

Du kan ersätta '123' med en parameter om du vill.

Men ett bättre sätt skulle vara att inte lagra kommaseparerade värden och istället skapa en detaljtabell. Om du behöver leta efter ett specifikt värde i en kommaseparerad lista kan du inte använda index, bland andra begränsningar.

[redigera] Missförstod frågan. Du menade så här:

update YourTable t
set
  t.col = substr(substr(replace(','||t.col||',', ',123,', ','), 2), -2)
where
  instr(','||t.col||',', '123') > 0
  • Lägg till ',' före och efter för att matcha objekt i början eller slutet av värdet.
  • Ersätt med värdet ',123' (inom kommatecken) för att förhindra att 1234 av misstag matchas också.
  • Använd substr två gånger för att ta bort det första och sista tecknet (de tillagda kommatecken)
  • Använd instr i var för att förhindra uppdatering av poster som inte behöver uppdateras (bättre prestanda).


  1. Hur man installerar PgBackRest

  2. Multithreading i MySQL?

  3. Välja arrayer i snyggt utskrivet format i SQL

  4. Få marionettbygget att misslyckas när SQL-skriptet inte kan köras