PostgreSQL - Comment vérifier si mes données contient une barre oblique inverse
-
22-08-2019 - |
Question
SELECT COUNT (*) FROM table WHERE colonne ilike '% /%';
me donne le nombre de valeurs contenant "/"
Comment faire la même chose pour "\"?
La solution
SELECT count(*)
FROM table
WHERE column ILIKE '%\\\\%';
Autres conseils
Extrait du docs :
Notez que la barre oblique inverse a déjà une signification spéciale dans des chaînes, afin d'écrire une constante de motif qui contient une barre oblique inverse, vous devez écrire deux antislashs dans une instruction SQL (en supposant la syntaxe de chaîne d'échappement est utilisé, voir la section 4.1.2.1). Ainsi, l'écriture d'un motif qui correspond en fait un anti-slash signifie écrire quatre antislashs dans la déclaration. Vous pouvez éviter cela en sélectionnant un caractère d'échappement avec ESCAPE; puis une barre oblique inverse n'est pas particulière à LIKE. (Mais il est toujours particulière à la chaîne analyseur littérale, vous devez donc encore deux d'entre eux.)
mieux encore - ne pas utiliser comme, il suffit d'utiliser la position standard:
select count(*) from from table where 0 < position( E'\\' in column );
Vous avez besoin E'\\\\'
parce que l'argument de LIKE
est une expression régulière et regex évasion omble chevalier est déjà \
(~ E'\\w'
correspondrait par exemple une chaîne contenant char imprimable).
Voir la doc