Поиск по MySQL с игнором регистра через оператор LIKE

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

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

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

Для выполнения поиска по шаблону LIKE, игнорирующего регистр символов, нужно привести значения в столбце и искомый шаблон к единому регистру. Для этого используются функции LOWER() (для перевода в нижний регистр) или UPPER() (для перевода в верхний регистр):

SQL
Скопировать код
SELECT * FROM таблица WHERE LOWER(столбец) LIKE LOWER('%параметр%');

В SQL Server для подобных запросов применяются коллации, игнорирующие регистр:

SQL
Скопировать код
SELECT * FROM таблица WHERE столбец COLLATE Latin1_General_CI_AI LIKE '%параметр%';
Кинга Идем в IT: пошаговый план для смены профессии

Повышение гибкости поиска

Функция LOWER() особенно полезна для реализации поиска, игнорирующего регистр символов. Её сочетание с оператором LIKE и символом-заменителем % значительно упрощает решение данной задачи. Вспомогательные функции, такие как LOWER() или LCASE(), улучшают поисковые возможности SQL:

SQL
Скопировать код
-- Шутка для разработчиков SQL: "Ветер перемен" пронизывает этот запрос!
SELECT * FROM деревья WHERE LOWER(название) LIKE LOWER('%ветер%');

Данный запрос обеспечивает нахождение совпадений для 'ВЕТЕР', 'Ветер' и 'ветер' с шаблоном поиска %ветер%.

Коллация в действии

Для осуществления поиска без учета регистра можно настроить коллацию столбца. Например, коллация UTF8_GENERAL_CI позволяет производить сравнения, игнорируя различия в регистре:

SQL
Скопировать код
ALTER TABLE деревья MODIFY COLUMN название VARCHAR(255) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
-- Шутка для разработчиков SQL: В качестве побочного эффекта возможно потребует перестроение индексов.

Суффикс _ci в названии коллации обозначает игнорирование регистра. После изменения коллации столбца может потребоваться переиндексация.

Изменение чувствительности к регистру для конкретного запроса

Для временного изменения чувствительности к регистру в конкретном запросе можно модифицировать коллацию, при этом сохраняя исходные настройки столбца. Это можно уподобить "временной татуировке" в мире SQL:

SQL
Скопировать код
SELECT * FROM деревья WHERE название COLLATE utf8_general_ci LIKE '%ветер%';

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

Представьте себе детектива, который ищет улики, связанные со словом 'КОТ', в базе данных библиотеки. Записи могут содержать 'кот', 'Кот' и 'КОТ'. Чтобы не упустить ни одного совпадения, вы верно используете такой запрос:

SQL
Скопировать код
SELECT * FROM библиотека WHERE LOWER(название_книги) LIKE LOWER('%кот%');

Этот запрос, подобно фонарю, сканирует полки библиотеки в поисках упоминаний 'КОТ', игнорируя регистр:

Markdown
Скопировать код
Освещённые результаты: [🔦'Кот в шляпе', 🔦'История гусеницы', 🔦'Каталог кошек']

Вопрос производительности

Применение функций LOWER() или COLLATE может влиять на производительность, особенно при работе с большими объёмами данных. Создание вычисляемых индексированных столбцов, содержащих значения в нижнем регистре, может стать стратегией увеличения скорости поиска. Бинарные коллации также могут способствовать оптимизации поисковых операций:

SQL
Скопировать код
CREATE INDEX idx_lower_title ON книги ((LOWER(название)));
-- Шутка для разработчиков SQL: Это непростое "вложение капитала" с лихвой окупится при поиске.
SELECT * FROM книги WHERE LOWER(название) LIKE '%кот%';

Улучшение читаемости кода

Использование подзапросов и псевдонимов поможет вашему коду на SQL оставаться аккуратным и понятным для восприятия на долгосрочной основе:

SQL
Скопировать код
SELECT book_info.*
FROM (
  SELECT LOWER(название) AS low_title, автор, год_издания
  FROM книги
) AS book_info
WHERE book_info.low_title LIKE LOWER('%ветер%');
-- Шутка для разработчиков SQL: Псевдоним вступает в игру, и эффективность запроса стремительно растет!

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

  1. PostgreSQL: Документация: 9.7. Поиск по шаблону
  2. COLLATE (Transact-SQL) – SQL Server | Microsoft Learn
  3. Руководство MySQL 8.0: Сравнение строковых функций и операторов
  4. SQL Server: Функция LOWER()
  5. Использование SQL-выражений в SQLite
  6. Синтаксис многоязычных регулярных выражений
  7. Понимание последовательных номеров журналов в SQL Server для резервного копирования