Значение символа подчеркивания _ в выражении LIKE SQLite

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В SQLite, символ % в запросе LIKE обозначает произвольную последовательность символов, а символ _ – ровно один любой символ:

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE 'start%';   -- Вернёт строки, начинающиеся с 'start'
SELECT * FROM table WHERE column LIKE '%end';     -- Вернёт строки, заканчивающиеся на 'end'
SELECT * FROM table WHERE column LIKE '_middle';  -- Вернёт строки, где перед 'middle' стоит ровно один символ
Кинга Идем в IT: пошаговый план для смены профессии

Работа со специальными символами

Для поиска символов % или _ в тексте, используйте оператор ESCAPE.

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE '%25%' ESCAPE '25';    -- Вернёт строки, содержащие символ '%'
SELECT * FROM table WHERE column LIKE '!_%' ESCAPE '!';      -- Вернёт строки, содержащие символ '_'

Выбор символа для экранирования остаётся за нами, подобно выбору фильма на Netflix в воскресный вечер!

Встреча с подчеркиваниями и процентами

Одиночное подчеркивание (_) соответствует ровно одному символу, три подчеркивания (___) — ровно трем символам. Маска из символов % игнорирует длину строки:

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE '___abc%';    -- Вернёт строки, где после трёх любых символов следует 'abc'

Случай с шаблонами GLOB

Для поиска с учётом регистра в SQLite используйте оператор GLOB:

SQL
Скопировать код
SELECT * FROM table WHERE column GLOB 'Data*';    -- Вернёт строки, начинающиеся с 'Data'
SELECT * FROM table WHERE column GLOB '?ata';     -- Вернёт строки, где на второй позиции 'a', а на первой – любой символ

Тут * и ? используются как маска для произвольного количества символов и ровно одного символа соответственно.

Визуализация

Для наглядности предствим, что каждая запись в нашей базе данных – это какая-то книга в библиотеке, и мы ищем названия по определенным шаблонам.

Markdown
Скопировать код
Библиотека 📚: ['Data Fun', 'Deep Dive', 'Daring Adventure', 'Daydream', 'Drastic Measures']

Оператор LIKE % позволяет найти книги с определенным окончанием в названии:

SQL
Скопировать код
SELECT title FROM library WHERE title LIKE 'Da%';

Результат:

Markdown
Скопировать код
📚➡️ 'Da%': ['Data Fun', 'Daring Adventure', 'Daydream']

Оператор LIKE _ находит названия, соответствующие определенным символам на заданной позиции:

SQL
Скопировать код
SELECT title FROM library WHERE title LIKE '_a%';

Результат:

Markdown
Скопировать код
📚➡️ '_a%': ['Data Fun', 'Daydream']

Итак, % работает как шаблон для последовательности символов, а _ — для одного символа.

Учитываем регистр

В SQLite оператор LIKE не учитывает регистр, в то время как GLOB – учитывает:

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE 'a%' COLLATE NOCASE;    -- Не учитывает регистр
SELECT * FROM table WHERE column GLOB 'A*';                   -- Учитывает регистр

Сложные шаблоны

SQLite позволяет использовать сложные шаблоны для поиска. Рассмотрим запрос с оператором LIKE:

SQL
Скопировать код
SELECT * FROM table WHERE column LIKE 'C_%_d';    -- Вернёт строки, начинающиеся на 'C', с любыми двумя символами после него и заканчивающиеся на 'd'

Полезные материалы

  1. SQLite Language Expressions — Официальная документация SQLite по оператору 'LIKE'.
  2. SQL LIKE Operator — Описание использования символа _ в операторе SQL LIKE.
  3. SQLite – LIKE Clause — Более подробно об операторе LIKE в SQLite.
  4. SQL: LIKE Condition — Общая теория об использовании 'LIKE & Wildcards' в SQL, что помогает понять базовые концепции.
  5. SQLite Language Expressions — Сравнение операторов LIKE и GLOB в SQLite.