Значение символа подчеркивания _ в выражении LIKE SQLite
Быстрый ответ
В SQLite, символ %
в запросе LIKE
обозначает произвольную последовательность символов, а символ _
– ровно один любой символ:
SELECT * FROM table WHERE column LIKE 'start%'; -- Вернёт строки, начинающиеся с 'start'
SELECT * FROM table WHERE column LIKE '%end'; -- Вернёт строки, заканчивающиеся на 'end'
SELECT * FROM table WHERE column LIKE '_middle'; -- Вернёт строки, где перед 'middle' стоит ровно один символ
Работа со специальными символами
Для поиска символов %
или _
в тексте, используйте оператор ESCAPE
.
SELECT * FROM table WHERE column LIKE '%25%' ESCAPE '25'; -- Вернёт строки, содержащие символ '%'
SELECT * FROM table WHERE column LIKE '!_%' ESCAPE '!'; -- Вернёт строки, содержащие символ '_'
Выбор символа для экранирования остаётся за нами, подобно выбору фильма на Netflix в воскресный вечер!
Встреча с подчеркиваниями и процентами
Одиночное подчеркивание (_
) соответствует ровно одному символу, три подчеркивания (___
) — ровно трем символам. Маска из символов %
игнорирует длину строки:
SELECT * FROM table WHERE column LIKE '___abc%'; -- Вернёт строки, где после трёх любых символов следует 'abc'
Случай с шаблонами GLOB
Для поиска с учётом регистра в SQLite используйте оператор GLOB
:
SELECT * FROM table WHERE column GLOB 'Data*'; -- Вернёт строки, начинающиеся с 'Data'
SELECT * FROM table WHERE column GLOB '?ata'; -- Вернёт строки, где на второй позиции 'a', а на первой – любой символ
Тут *
и ?
используются как маска для произвольного количества символов и ровно одного символа соответственно.
Визуализация
Для наглядности предствим, что каждая запись в нашей базе данных – это какая-то книга в библиотеке, и мы ищем названия по определенным шаблонам.
Библиотека 📚: ['Data Fun', 'Deep Dive', 'Daring Adventure', 'Daydream', 'Drastic Measures']
Оператор LIKE %
позволяет найти книги с определенным окончанием в названии:
SELECT title FROM library WHERE title LIKE 'Da%';
Результат:
📚➡️ 'Da%': ['Data Fun', 'Daring Adventure', 'Daydream']
Оператор LIKE _
находит названия, соответствующие определенным символам на заданной позиции:
SELECT title FROM library WHERE title LIKE '_a%';
Результат:
📚➡️ '_a%': ['Data Fun', 'Daydream']
Итак, %
работает как шаблон для последовательности символов, а _
— для одного символа.
Учитываем регистр
В SQLite оператор LIKE
не учитывает регистр, в то время как GLOB
– учитывает:
SELECT * FROM table WHERE column LIKE 'a%' COLLATE NOCASE; -- Не учитывает регистр
SELECT * FROM table WHERE column GLOB 'A*'; -- Учитывает регистр
Сложные шаблоны
SQLite позволяет использовать сложные шаблоны для поиска. Рассмотрим запрос с оператором LIKE
:
SELECT * FROM table WHERE column LIKE 'C_%_d'; -- Вернёт строки, начинающиеся на 'C', с любыми двумя символами после него и заканчивающиеся на 'd'
Полезные материалы
- SQLite Language Expressions — Официальная документация SQLite по оператору 'LIKE'.
- SQL LIKE Operator — Описание использования символа
_
в операторе SQLLIKE
. - SQLite – LIKE Clause — Более подробно об операторе LIKE в SQLite.
- SQL: LIKE Condition — Общая теория об использовании 'LIKE & Wildcards' в SQL, что помогает понять базовые концепции.
- SQLite Language Expressions — Сравнение операторов LIKE и GLOB в SQLite.