PostgreSQL - como verificar se os meus dados contém uma barra invertida
-
22-08-2019 - |
Pergunta
SELECT COUNT (*) FROM tabela WHERE coluna ilike '% /%';
me dá o número de valores que contém "/"
Como a fazer o mesmo para "\"?
Solução
SELECT count(*)
FROM table
WHERE column ILIKE '%\\\\%';
Outras dicas
Trecho do docs :
Note que a barra invertida já tem um significado especial em strings literais, então a escrever uma constante padrão que contém uma barra invertida você deve escrever duas barras invertidas em uma instrução SQL (assumindo fuga sintaxe da cadeia é usado, ver Secção 4.1.2.1). Assim, escrever um padrão que realmente corresponde um meio barra invertida literal escrevendo quatro barras invertidas na declaração. Você pode evitar isso, a seleção de um caractere de escape diferente com ESCAPE; em seguida, uma barra invertida não é especial a gostar mais. (Mas ainda é especial para o analisador literal string, então você ainda precisa de dois deles.)
ainda melhor - não use como, é só usar posição padrão:
select count(*) from from table where 0 < position( E'\\' in column );
Você precisa E'\\\\'
porque o argumento para LIKE
é um regex e caractere de escape regex já está \
(por exemplo ~ E'\\w'
iria corresponder a qualquer cadeia que contenha um caractere de impressão).
Veja a doc