PostgreSQL - как проверить, содержат ли мои данные обратную косую черту

StackOverflow https://stackoverflow.com/questions/706364

  •  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' будет соответствовать любой строке, содержащей печатаемый символ).

Смотрите на док

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top