В таблице users адрес электронной почты хранится в разном регистре: Anna@mail.ru, anna@MAIL.ru и т.д. Как надёжнее всего найти все записи с конкретным адресом вне зависимости от регистра?

AПрименить UPPER(email) в WHERE и сравнивать с верхним регистром искомого адреса
BИспользовать TRIM(email) в WHERE для удаления пробелов и приведения к единому регистру
CПрименить LOWER(email) в WHERE и сравнивать с нижним регистром искомого адреса
DПеречислить через OR все возможные варианты регистра написания искомого адреса
Правильный ответ. Функции LOWER и UPPER приводят строку к единому регистру и позволяют сравнивать значения без учёта регистра.

Разбор

Чтобы сравнение не зависело от того, какие буквы заглавные, удобно привести обе стороны к одному регистру: WHERE LOWER(email) = LOWER('anna@mail.ru'). Перечисление всех возможных вариантов написания через OR ненадёжно: количество комбинаций растёт экспоненциально с длиной строки, легко что-то пропустить. Функция TRIM убирает пробелы по краям, но не меняет регистр букв. На больших таблицах для ускорения такого поиска можно создать функциональный индекс по LOWER(email).

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

Ещё вопросы по теме «Основы SQL-запросов»