sql >> Database >  >> RDS >> Oracle

Is het mogelijk om een ​​door komma's gescheiden kolom op te vragen voor een specifieke waarde?

Dat kan met LIKE. U wilt geen overeenkomsten voor gedeeltelijke waarden, dus u moet de komma's in uw zoekopdracht opnemen. Dat betekent ook dat je een extra komma moet opgeven om naar waarden te zoeken aan het begin of einde van je tekst:

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

Maar deze zoekopdracht zal traag zijn, net als alle zoekopdrachten die LIKE gebruiken, vooral met een leidend jokerteken.

En er is altijd een risico. Als er spaties rond de waarden staan, of als waarden zelf komma's kunnen bevatten, in welk geval ze worden omgeven door aanhalingstekens (zoals in csv-bestanden), zal deze query niet werken en moet u nog meer logica toevoegen, waardoor uw query wordt vertraagd nog meer.

Een betere oplossing zou zijn om voor deze categorieën een kindertabel toe te voegen. Of liever zelfs een aparte tabel voor de categorieën, en een tabel die ze kruislinkt naar YourTable.



  1. NULL in MySQL (prestaties en opslag)

  2. Fix "FOUT:elke UNION-query moet hetzelfde aantal kolommen hebben" in PostgreSQL

  3. Postgres Kolomgeheel getal wijzigen in Booleaans

  4. MySQL DROP-DATABASE