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)