Список специальных символов для предложения SQL LIKE - PullRequest
111 голосов
/ 03 апреля 2009

Каков полный список всех специальных символов для SQL (меня интересует SQL Server, но другие тоже подойдут) LIKE?

* 1003 Е.Г. *

SELECT Name FROM Person WHERE Name LIKE '%Jon%'

SQL Server :

  1. %
  2. _
  3. [спецификатор] Например, [A-Z]
  4. [^ спецификатор]
  5. ESCAPE пункт Eg. % 30! %% 'ESCAPE'! ' оценит 30% как истинное
  6. 'символы должны быть экранированы с' Eg. они становятся, они

MySQL:

  1. % - Любая строка из нуля или более символов.
  2. _ - любой отдельный символ
  3. ESCAPE пункт E.g. % 30! %% 'ESCAPE'! ' оценит 30% как истинное

Oracle:

  1. % - Любая строка из нуля или более символов.
  2. _ - любой отдельный символ
  3. ESCAPE пункт Eg. % 30! %% 'ESCAPE'! ' оценит 30% как истинное

* Sybase 1059 *

  1. %
  2. _
  3. [спецификатор] Например, [A-Z]
  4. [^ спецификатор]

Прогресс:

  1. % - Любая строка из нуля или более символов.
  2. _ - любой отдельный символ

    Справочное руководство здесь [PDF]

PostgreSQL:

  1. % - Любая строка из нуля или более символов.
  2. _ - любой отдельный символ
  3. ESCAPE пункт E.g. % 30! %% 'ESCAPE'! ' оценит 30% как истинное

ANSI SQL92:

  1. %
  2. _
  3. Символ ESCAPE только если указан .

PostgreSQL также имеет оператор SIMILAR TO, который добавляет следующее:

  1. [specifier]
  2. [^specifier]
  3. | - любой из двух вариантов
  4. * - повторение предыдущего элемента ноль или более раз.
  5. + - повторение предыдущего пункта один или несколько раз.
  6. () - сгруппировать элементы вместе

Идея состоит в том, чтобы сделать эту вики сообщества, которая может стать для этого "универсальным магазином".

Ответы [ 5 ]

21 голосов
/ 03 апреля 2009

Для SQL Server, от http://msdn.microsoft.com/en-us/library/ms179859.aspx:

  • % Любая строка из нуля или более символов.

    WHERE title LIKE '%computer%' находит все названия книг со словом «компьютер» в любом месте названия книги.

  • _ Любой отдельный символ.

    WHERE au_fname LIKE '_ean' находит все четырехбуквенные имена, заканчивающиеся на ean (Дин, Шон и т. Д.).

  • [] Любой отдельный символ в указанном диапазоне ([a-f]) или набор ([abcdef]).

    WHERE au_lname LIKE '[C-P]arsen' находит фамилии автора, заканчивающиеся на arsen и начинающиеся с любого символа между C и P, например, Carsen, Larsen, Karsen и т. Д. При поиске по диапазону символы, включенные в диапазон, могут различаться в зависимости от правил сортировки.

  • [^] Любой отдельный символ, не входящий в указанный диапазон ([^ a-f]) или набор ([^ abcdef]).

    WHERE au_lname LIKE 'de[^l]%' все фамилии авторов, начинающиеся с de и в которых следующая буква не является l.

6 голосов
/ 03 апреля 2009

ANSI SQL92 :

  • %
  • _
  • символ ESCAPE только если указан .

Вызывает разочарование, что многие базы данных не придерживаются стандартных правил и не добавляют дополнительные символы, или неправильно включают ESCAPE со значением по умолчанию «\», если оно отсутствует. Как будто у нас уже нет проблем с ‘\’!

Невозможно написать независимый от СУБД код здесь, потому что вы не знаете, какие символы вы должны будете экранировать, и стандарт гласит, что вы не можете избежать тех вещей, которые не нужно экранировать. (См. Раздел 8.5 / Общие правила / 3.a.ii.)

Спасибо, SQL! gnnn

5 голосов
/ 19 августа 2009

Вы должны добавить, что вам нужно добавить дополнительный «чтобы избежать существующего» в SQL Server:

кузнец -> кузнец

1 голос
/ 03 апреля 2009

Sybase:

%              : Matches any string of zero or more characters.
_              : Matches a single character.
[specifier]    : Brackets enclose ranges or sets, such as [a-f] 
                 or [abcdef].Specifier  can take two forms:

                 rangespec1-rangespec2: 
                   rangespec1 indicates the start of a range of characters.
                   - is a special character, indicating a range.
                   rangespec2 indicates the end of a range of characters.

                 set: 
                  can be composed of any discrete set of values, in any 
                  order, such as [a2bR].The range [a-f], and the 
                  sets [abcdef] and [fcbdae] return the same 
                  set of values.

                 Specifiers are case-sensitive.

[^specifier]    : A caret (^) preceding a specifier indicates 
                  non-inclusion. [^a-f] means "not in the range 
                  a-f"; [^a2bR] means "not a, 2, b, or R."
0 голосов
/ 23 февраля 2017

Потенциальный ответ для SQL Server

Интересно, что я только что выполнил тест, используя LinqPad с SQL Server, который должен был просто запустить Linq to SQL, и он генерирует следующий оператор SQL.

Отчеты .Where (r => r.Name.Contains ("lkjwer --_ ~ []"))

-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'

Так что я еще не тестировал его, но, похоже, ключевое слово ESCAPE '~' может позволить автоматически экранировать строку для использования в выражении like.

...