Чтобы получить LIKE
сравнение, чтобы соответствовать «\'
» (буквальный символ обратной косой черты, за которыми следует апостроф, что может быть сделано, но это требует некоторого пристального внимания к побеге.
Самая большая проблема заключается в том, что MySQL использует символ обратной косой черты в строкового литерала как «побег» характер ... например \n
представляет один символ новой строки.
Вот демонстрация.
SELECT t.foo
, t.foo LIKE '%\\\\''%' AS `match_`
FROM (
SELECT 'abc\\''def' AS `foo`
UNION ALL SELECT 'gh\\i\\j'
UNION ALL SELECT 'k\\lm''n'
) t
Результаты сравнения LIKE
возвращаются как вторая колонка. Значение 1
указывает TRUE, значение 0
указывает FALSE.)
foo match_
-------- ------
abc\'def 1
gh\i\j 0
k\lm'n 0
Давайте распаковать, что немного.
Чтобы представить одиночную кавычку в строковом литерале, нам нужно использовать две одинарные кавычки. В качестве примера:
SELECT 'I''m home' --> I'm home
Чтобы получить обратной косой черты в строковый литерал, нам нужно два обратной косой черты. Первая обратная косая черта запускает обычную «escape-последовательность» MySQL, вторая обратная косая черта - это символ, который сбежал. Например:
SELECT 'a\\b' --> a\b
В LIKE
сравнения, символ обратной косой черты считается «побег» характер.Мы использовали бы это до '%'
или '_'
(символ процента или подчеркивания, которые обычно интерпретируются как дикие карты), чтобы они интерпретировались как буквенные символы, которые мы хотим сопоставить.
Чтобы получить сравнение LIKE
, чтобы соответствовать буквальному символу обратной косой черты, нам нужно символы обратной косой черты. Как мы только что продемонстрировали, для получения символа обратной косой черты в строковом литерале требуется два обратных косых черт. Поэтому нам нужно в общей сложности четыре символов обратной косой черты.
первый один * очень * близко. Это просто отсутствует другая обратная косая черта и другая одиночная цитата. Нужно быть ** четырьмя ** символами обратной косой черты и ** двумя ** одиночными кавычками "**' '% \\\\ ''% '' ** ". См. Мой ответ для демонстрации и более подробное объяснение. – spencer7593
спасибо за вашу длинную обратную связь, это помогло много , однако мы не смогли сделать инструкцию LIKE '% \\\\' '%', поэтому мы использовали REGEX: SELECT * FROM elementbody WHERE elementbody REGEXP ' \\\\ '' ' и он сделал работу cheers –
Я не уверен, почему 'LIKE'% \\\\ ''% '' не работал для вас, чтобы возвращать строки, содержащие "**' \ ''**" (буквальная обратная косая черта, сопровождаемая литеральной цитатой). Вот простая демонстрация, показывающая, что она работает: [** SQL Fiddle ** http://sqlfiddle.com/#!9/ a7199/1] (http://sqlfiddle.com/#!9/a7199/1). Те же правила, которые применяются к строковым литералам в LIKE, также применяются в 'REGEXP'. В более общем случае в шаблоне регулярных выражений есть гораздо больше «специальных символов», которые необходимо избегать. (Я предложил решение для 'LIKE', потому что это вопрос, заданный.) – spencer7593