SQLite Как% и _ - программирование
Подтвердить что ты не робот

SQLite Как% и _

Я не могу понять, что делает символ подчеркивания в инструкции SQLite like. Символ подстановки, %, вероятно, такой же, как в большинстве других баз данных SQL.

Итак, что делает черт _ символ?

4b9b3361

Ответ 1

Подчеркивание также такое же, как и в большинстве других баз данных 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.

Ответ 2

Это стандартный SQL, что в выражениях LIKE:

  • % соответствует любой последовательности символов, включая пустую. Это эквивалентно .* в регулярном выражении.
  • _ соответствует одному символу. Это эквивалентно . в регулярном выражении.
  • Вы можете выбрать символ для экранирования %, _ и самого себя:

    ... WHERE expr LIKE 'a_b%c\\d\%\_' ESCAPE '\'
    

    Это будет соответствовать a×b×××c\d%_ или a×bc\d%_, но не abc\d%_ и a×b×××cd%_.

В дополнение к SQLite у вас есть ключевое слово GLOB, которое ведет себя точно так же, за исключением того, что % становится * и _ становится ?.

Ответ 3

Добавление к ответу @Benoit:

ESCAPE применяется к последнему выражению LIKE, а не ко всем выражениям LIKE. Чтобы избежать всех, вы должны использовать ESCAPE несколько раз, например, ниже.

WHERE foo LIKE '%bar^%%' ESCAPE '^' AND foo LIKE '%baz^_%' ESCAPE '^'

Этот предикат соответствует значениям foo, которые содержат bar%, или baz плюс любой символ.

Ответ 4

Для записи я использую в среде XCode/ Objective-C, '\' не работает. Вместо этого используйте что-нибудь еще...

Сценарии стиля C, использующие символ обратной косой черты, не поддерживаются, потому что они не являются стандартными SQL (https://www.sqlite.org/lang_expr.html)