web-dev-qa-db-fra.com

Comment trouver un signe de pourcentage littéral (%) dans PostgreSQL en utilisant une requête LIKE?

J'ai character varying entrées dans un tableau où certaines (pas toutes) les valeurs contiennent des pourcentages, par exemple, '12%', '97%', etc. Je veux trouver toutes les valeurs qui contiennent des pourcentages. En d'autres termes, je veux trouver toutes les valeurs qui se terminent par un signe de pourcentage ('%').

19
magnus

Vous pouvez essayer comme ceci:

SELECT * FROM my_table  WHERE my_column LIKE '%\%%' ESCAPE '\';

Format

 <like predicate> ::=
      <match value> [ NOT ] LIKE <pattern>
        [ ESCAPE <escape character> ]

 <match value> ::= <character value expression>

 <pattern> ::= <character value expression>

 <escape character> ::= <character value expression>
16
Rahul Tripathi

Vous devez échapper au signe% littéral. Par défaut, le caractère d'échappement est la barre oblique inverse:

SELECT * FROM my_table  WHERE my_column LIKE '%\%';

Dans ce cas, le premier % signe correspond à n'importe quelle séquence de départ dans my_column. Le reste \% sont interprétés comme un caractère% littéral. La combinaison est donc: correspond à tout ce qui se termine par un caractère%.

SQLFiddle

8
Patrick

J'ai fini par utiliser des expressions régulières:

select * from my_table where my_column ~ '%$';

Cependant, je voudrais quand même savoir si c'est possible en utilisant l'opérateur/comparaison LIKE.

0
magnus