Список специальных символов для предложения 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
, который добавляет следующее:
-
[specifier]
-
[^specifier]
-
|
- любая из двух альтернатив
-
*
- повторение предыдущего элемента ноль или более раз.
-
+
- повторение предыдущего элемента один или несколько раз.
-
()
- элементы группы вместе
Идея состоит в том, чтобы сделать это сообщество 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 '~'
может допускать автоматическое экранирование строки для использования в подобном выражении.