#sql #string #sqlite #group-by
#sql #строка #sqlite #группировка по
Вопрос:
В моей таблице есть столбец для адресов электронной почты, где адреса могут быть в нижнем регистре, в верхнем регистре, в формате camelcase и т. Д. Как я могу изменить свой запрос так, чтобы адреса, подобные example@gmail.com и ПРИМЕР @GMAIL.COM будут сгруппированы вместе.
Это мой фактический запрос:
SELECT count(Email) as Number, Email
FROM tbl_SAP_Users
GROUP BY Email
HAVING Number > 1
ORDER BY Number DESC;
Ответ №1:
Вы можете group by lower(Email)
:
SELECT count(*) as Number, lower(Email) Email
FROM tbl_SAP_Users
GROUP BY lower(Email)
HAVING Number > 1
ORDER BY Number DESC;
Или использовать COLLATE NOCASE
в GROUP BY
предложении:
SELECT count(*) as Number, Email
FROM tbl_SAP_Users
GROUP BY Email COLLATE NOCASE
HAVING Number > 1
ORDER BY Number DESC;
Комментарии:
1. Это определенно удовлетворяет мои потребности, но Том Смоллвуд также решил проблему, о которой я не подозревал. Тем не менее, спасибо.
2. @SebastianS Могут быть другие проблемы, которые вы не описали в своем вопросе. Вы же не ожидаете, что мы догадаемся, не так ли?
3. Я этого не делаю. Если я найду еще какие-то проблемы, я обновлю вопрос. Или лучше, я ищу, как манипулировать данными, например, с помощью lower() и trim().
4. @SebastianS Если вы этого не сделаете, вам следует принять ответ, который решил проблему, которую вы описали в своем вопросе, потому что, если в ваших электронных письмах есть начальные или конечные пробелы, тогда предложение GROUP BY будет группироваться
'a'
и'a '
в разных группах, но это не то, что вы просили.