MySQL: Почему экранирование не работает в операторе LIKE? - PullRequest
1 голос
/ 30 апреля 2020

Я экспериментирую со строками сопоставления с образцом в MySQL 8.0:

CREATE TABLE foo (bar VARCHAR(250));

INSERT INTO `foo` (`bar`) VALUES ('\%');

В качестве упражнения я хотел бы написать конкретный c запрос, используя LIKE, который возвращает строки, которые "как буквальный \%". (я знаю, что на самом деле это должно быть сделано с = сравнением, но это упражнение)

  1. Поскольку % является подстановочным знаком, я не могу просто используйте:

    SELECT * from `foo` WHERE `bar` LIKE '\%';

  2. Когда я пытаюсь сбежать, используя escape-символ по умолчанию \, он также завершается неудачно:

    SELECT * from `foo` WHERE `bar` LIKE '\\%';

  3. И также, когда я пытаюсь использовать ключевое слово ESCAPE для определения escape-символа не по умолчанию:

    SELECT * from `foo` WHERE `bar` LIKE '\|%' ESCAPE '|';

Почему у меня не работают запросы 2 и 3?

1 Ответ

1 голос
/ 30 апреля 2020

три простые.

% - это не подстановочный знак, это просто символ, похожий на любой другой символ

SELECT * from `foo` WHERE `bar` LIKE '\%' ESCAPE '|';

Работает просто отлично

Второй тоже работает.

Но вам нужно

SELECT * from `foo` WHERE `bar` LIKE '\\\%';

Я помню, вам нужно сбежать и подстановочный знак!

...