Я не могу понять, что делает символ подчеркивания в инструкции SQLite like.
Символ подстановки, %, вероятно, такой же, как в большинстве других баз данных SQL.
Итак, что делает черт _ символ?
Я не могу понять, что делает символ подчеркивания в инструкции SQLite like.
Символ подстановки, %, вероятно, такой же, как в большинстве других баз данных SQL.
Итак, что делает черт _ символ?
Подчеркивание также такое же, как и в большинстве других баз данных SQL, и соответствует любому одиночному символу (т.е. совпадает с . в регулярном выражении). Из прекрасного руководства:
Подчеркивание ( "_" ) в шаблоне LIKE соответствует любому одиночному символу в строке.
Например:
-- 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 использует ноль и один для booleans.
Это стандартный 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:
 ESCAPE применяется к последнему выражению LIKE, а не ко всем выражениям LIKE. Чтобы избежать всех, вы должны использовать ESCAPE несколько раз, например, ниже.
WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'
Этот предикат соответствует значениям foo, которые содержат bar%, или baz плюс любой символ.
Для записи я использую в среде XCode/ Objective-C, '\' не работает. Вместо этого используйте что-нибудь еще...
Сценарии стиля C, использующие символ обратной косой черты, не поддерживаются, потому что они не являются стандартными SQL (https://www.sqlite.org/lang_expr.html)