PostgreSQL - как проверить, содержат ли мои данные обратную косую черту
-
22-08-2019 - |
Вопрос
ВЫБЕРИТЕ count(*) ИЗ таблицы, ГДЕ столбец ilike '%/%';
дает мне количество значений, содержащих "/"
Как сделать то же самое для "\"?
Решение
SELECT count(*)
FROM table
WHERE column ILIKE '%\\\\%';
Другие советы
Выдержка из Документы:
Обратите внимание, что обратная косая черта уже имеет особое значение в строковых литералах, поэтому для записи константы шаблона, содержащей обратную косую черту, вы должны написать две обратные косые черты в инструкции SQL (предполагая, что используется синтаксис escape-строки, см. Раздел 4.1.2.1).Таким образом, написание шаблона, который фактически соответствует буквальной обратной косой черте, означает написание четырех обратных косых черт в операторе.Вы можете избежать этого, выбрав другой экранирующий символ с помощью ESCAPE;тогда обратная косая черта больше не является чем-то особенным, что может ПОНРАВИТЬСЯ.(Но он по-прежнему является специальным для анализатора строковых литералов, поэтому вам по-прежнему понадобятся два из них.)
а еще лучше - не используйте "нравится", просто используйте стандартную позицию:
select count(*) from from table where 0 < position( E'\\' in column );
Вам нужно E'\\\\'
потому что аргумент к LIKE
является регулярным выражением, а regex escape char уже \
(например, ~ E'\\w'
будет соответствовать любой строке, содержащей печатаемый символ).
Смотрите на док