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

Ist es möglich, eine kommagetrennte Spalte nach einem bestimmten Wert abzufragen?

Mit LIKE ist das möglich. Sie möchten nicht nach Teilwerten suchen, daher müssen Sie die Kommas in Ihre Suche einbeziehen. Das bedeutet auch, dass Sie ein zusätzliches Komma angeben müssen, um am Anfang oder Ende Ihres Textes nach Werten zu suchen:

select 
  * 
from
  YourTable 
where 
  ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'

Aber diese Abfrage wird langsam sein, ebenso wie alle Abfragen, die LIKE verwenden, insbesondere mit einem führenden Platzhalter.

Und es gibt immer ein Risiko. Wenn Leerzeichen um die Werte herum sind oder Werte selbst Kommas enthalten können, in welchem ​​Fall sie von Anführungszeichen umgeben sind (wie in CSV-Dateien), funktioniert diese Abfrage nicht und Sie müssen noch mehr Logik hinzufügen, was Ihre Abfrage verlangsamt noch mehr.

Eine bessere Lösung wäre, eine untergeordnete Tabelle für diese Kategorien hinzuzufügen. Oder besser gesagt sogar eine separate Tabelle für die Kategorien und eine Tabelle, die sie mit YourTable verknüpft.