SQLite как % и
Я не могу понять, что символ подчеркивания делает в SQLite like
заявление.
Подстановочный знак, %
, вероятно, то же самое, что и в большинстве других баз данных SQL.
Так что же это за чертовщина _
символы?
4 ответа:
подчеркивание также совпадает с большинством других баз данных SQL и соответствует любому одиночному символу (т. е. это то же самое, что и
.
в регулярном выражении). Из тонкой ручной:подчеркивание ( " _ " ) в подобном шаблоне соответствует любому одиночному символу в строке.
например:
-- The '_' matches the single 'c' sqlite> select 'pancakes' like 'pan_akes'; 1 -- This would need '__' to match the 'ca', only one '_' fails. sqlite> select 'pancakes' like 'pan_kes'; 0 -- '___' also fails, one too many '_'. sqlite> select 'pancakes' like 'pan___kes'; 0
и просто чтобы убедиться, что результаты имеют смысл: SQLite использует ноль и один для булевых.
это стандартный SQL, что в
LIKE
выражения:
%
соответствует любой последовательности символов, в том числе пустой. Это эквивалентно.*
в регулярном выражении._
соответствует одному символу. Это эквивалентно.
в регулярном выражении.вы можете выбрать символ для побега
%
,_
а сама себе с:... WHERE expr LIKE 'a_b%c\d\%\_' ESCAPE '\'
это будет соответствовать
a×b×××c\d%_
илиa×bc\d%_
а неabc\d%_
, ниa×b×××cd%_
.дополнительно с SQLite у вас есть
GLOB
ключевое слово, которое ведет себя точно так же, за исключением того, что%
становится*
и_
становится?
.
добавление к ответу @Benoit:
The
ESCAPE
применяется к самому последнемуLIKE
выражения, не всеLIKE
выражения. Чтобы избежать все, что вы должны использоватьESCAPE
несколько раз, например, ниже.WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'
этот предикат соответствует значениям
foo
содержащих бар% или баз плюс любого персонажа.
для записи, я использую в среде XCode/Objective-C, '\' не работает. Используйте что-нибудь другое вместо этого...
экранирование в стиле C с использованием символа обратной косой черты не поддерживается, поскольку они не являются стандартными SQL (https://www.sqlite.org/lang_expr.html)