Список специальных символов для предложения SQL LIKE

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

например.

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

SQL Server:

  • %
  • _
  • [спецификатор]. [А-г]
  • [^ спецификатор]
  • Предложение ESCAPE, например. % 30! %% 'ESCAPE'! ' будет оценивать 30% как истинный
  • 'символы должны быть экранированы с помощью. они становятся ими.

MySQL:

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

Oracle:

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

Sybase

  • %
  • _
  • [спецификатор]. [А-г]
  • [^ спецификатор]

Прогресс:

PostgreSQL:

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

ANSI SQL92:

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

ANSI SQL92:

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

Неутешительно, что многие базы данных не придерживаются стандартных правил и не добавляют лишних символов, либо неправильно активируют ESCAPE со значением по умолчанию '\, когда он отсутствует. Подобно тому, как у нас еще не достаточно проблем с '\!

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

Спасибо SQL! gnnn

Ответ 3

Вы должны добавить, что вам нужно добавить дополнительный "чтобы избежать exising" в SQL Server:

smith → smith '

Ответ 4

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."

Ответ 5

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

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

Отчеты   . Где (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 '~' может допускать автоматическое экранирование строки для использования в подобном выражении.