Oracle
 sql >> Base de données >  >> RDS >> Oracle

Est-il possible d'interroger une colonne séparée par des virgules pour une valeur spécifique ?

Vous pouvez, en utilisant LIKE. Vous ne voulez pas faire correspondre des valeurs partielles, vous devrez donc inclure les virgules dans votre recherche. Cela signifie également que vous devrez fournir une virgule supplémentaire pour rechercher des valeurs au début ou à la fin de votre texte :

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

Mais cette requête sera lente, comme toutes les requêtes utilisant LIKE, en particulier avec un caractère générique au début.

Et il y a toujours un risque. S'il y a des espaces autour des valeurs, ou si les valeurs peuvent elles-mêmes contenir des virgules, auquel cas elles sont entourées de guillemets (comme dans les fichiers csv), cette requête ne fonctionnera pas et vous devrez ajouter encore plus de logique, ce qui ralentira votre requête. encore plus.

Une meilleure solution serait d'ajouter une table enfant pour ces catégories. Ou plutôt même une table séparée pour les catégories, et une table qui les relie à YourTable.