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

Comment effectuer une requête de recherche sur une valeur de colonne contenant une chaîne avec des valeurs séparées par des virgules ?

Vous pouvez faire quelque chose comme ça.

select name from zone_table where 
string_to_array(replace(tags,' ',''),',')@>
string_to_array(replace('down, 110.22.100.3',' ',''),',');

1) supprimer les espaces dans la chaîne existante pour une séparation correcte de string_to_array sans aucun espace devant en utilisant remplacer

2)string_to_array convertit votre chaîne en tableau séparé par une virgule.

3) @> est le contains opérateur

(OU)

Si vous voulez correspondre dans son ensemble

select name from zone_table where POSITION('down, 110.22.100.3' in tags)!=0

Pour des matchs séparés, vous pouvez faire

select name from zone_table where POSITION('down' in tags)!=0 and 
POSITION('110.22.100.3' in tags)!=0

En savoir plus sur la position ici