MySQL без учета регистра DISTINCT

Может ли кто-нибудь сказать мне, как я могу SELECT DISTINCT из моей базы данных без учета регистра?

Мой запрос

SELECT DISTINCT email FROM `jm_order`

Результаты выводят все электронные письма в таблице, но повторяют те, которые имеют разные регистры. Это ожидаемо, потому что значения различаются в зависимости от случая. например

[email protected]
[email protected]
[email protected]
[email protected]

Но я хочу, чтобы одни и те же электронные письма были сгруппированы вместе независимо от случая. Какую корректировку я могу внести в свой SQL, чтобы он не повторялся, например, [email protected] и [email protected] только потому, что это разные случаи?


person Raymond Ativie    schedule 25.07.2013    source источник
comment
Возможный дубликат SELECT DISTINCT игнорирует разные случаи   -  person Cees Timmerman    schedule 11.10.2017


Ответы (3)


Попробуйте использовать функцию upper

SELECT DISTINCT UPPER(email) FROM `jm_order`

вы также можете использовать lower вместо этого

SELECT DISTINCT LOWER(email) FROM `jm_order`

Дополнительная информация.

person Robert    schedule 25.07.2013

Если вы хотите сохранить регистр электронного письма (чтобы оно фактически соответствовало одной из строк), вы можете сделать:

select email
from jm_order
group by lower(email);
person Gordon Linoff    schedule 25.07.2013
comment
Это действительно работает? Как это вообще возможно? Как СУБД узнает, какой результат она должна вернуть. - person T3rm1; 06.06.2019
comment
@ T3rm1 . . . MySQL возвращает электронное письмо из произвольной совпадающей строки. В более поздних версиях MySQL это фактически привело бы к ошибке при использовании настроек по умолчанию. - person Gordon Linoff; 06.06.2019

Попробуй это:

SELECT DISTINCT LOWER(email) AS email 
FROM `jm_order`
person Dave Sexton    schedule 25.07.2013