Что означает \% и \\ в запросе SQL? - PullRequest
0 голосов
/ 04 сентября 2018

Я знаю значение подстановочных знаков % и _, но я застрял в вопросе, в котором использовались два дополнительных символа \% и \\, я не смог понять, что на самом деле представляют собой эти символы значит в SQL запросе

SELECT productID 
FROM productList 
WHERE productName LIKE 'ab\%cd%'

и

SELECT productID 
FROM productList 
WHERE productName LIKE 'ab\\cd%'

это две одинаковые вещи или разные ??

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Я считаю, что лучший способ увидеть разницу - это пример.

Чтобы лучше понять это, вам понадобятся знания о 3 вещах при использовании оператора LIKE в SQL:

  • \ используется для экранирования специальных символов, чтобы использовать их как обычные символы
  • % используется для соответствия любому количеству символов (включая 0)
  • спецсимволами являются \ и %, поэтому, если вы хотите включить их буквально, вам нужно их экранировать, поэтому для проверки их в текстовом столбце вам соответственно необходимо использовать \\ и \%.

Ниже приведена таблица со словами и результатами «истина / ложь» для LIKE сравнения с обоими образцами:

   word   | ab\%cd% | ab\\cd%
----------+---------+---------
 ab\      | f       | f        -- this would match second pattern but there is no "cd" at the end
 ab\cd    | f       | t        -- \\ is escaped "\", and % matches none characters
 ab\cdxzy | f       | t        -- \\ is escaped "\", and % matches character sequence "xzy"
 abcd     | f       | f        -- every string requires either "%" or "\" character after "ab"
 ab%cd    | t       | f        -- \% is escaped "%", and % matches none characters
 ab%cdxzy | t       | f        -- \% is escaped "%", and % matches character sequence "xzy"
 ab\%cd   | f       | f        -- there is no pattern which matches both chars "\%" in sequence
 ab%\cd   | f       | f        -- same as above, but characters are "%\" in sequence
0 голосов
/ 04 сентября 2018

Последовательности \% и \_ используются для поиска литеральных экземпляров. % и _ в контекстах сопоставления с образцом, где в противном случае они интерпретироваться как символы подстановки.

Для \\ он ищет одну обратную косую черту \.

Ссылка: Справочное руководство по MySQL 8.0, 9.1.1 Строковые литералы, Таблица 9.1 Последовательности сброса специальных символов

0 голосов
/ 04 сентября 2018

Поскольку % является специальным символом, вы должны экранировать его с \, чтобы соответствовать буквальному символу % в ваших данных. Таким образом, 'ab\%cd%' соответствует букве a, за которой следует буква b, за которой следует символ%, буква c, буква d, а затем любой другой текст (поскольку последний % является подстановочным знаком).

Точно так же, поскольку \ является специальным символом, используемым для создания escape-последовательностей, вы должны экранировать его, чтобы он соответствовал литералу \ в шаблоне, поэтому, чтобы соответствовать одному \, вы должны кодировать его как \\.

...