Подтвердить что ты не робот

Как выбрать доменное имя с адреса электронной почты

У меня есть адрес электронной почты, например [email protected] и [email protected] [email protected] и т.д. Мне нужен запрос выбора Mysql, чтобы он обрезал имена пользователей и .com возвращал вывод как gmail, ymail, hotmail и т.д.

4b9b3361

Ответ 1

Предполагая, что домен является одним доменом, например gmail.com, yahoo.com, используйте

select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1))

Внутренний SUBSTR получает правильную часть адреса электронной почты после @, а внешний SUBSTRING_INDEX отключит результат в первый период.

иначе, если ожидается, что в домене будет указано несколько слов типа mail.yahoo.com и т.д., используйте:

select (SUBSTR(email, INSTR(email, '@') + 1, LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1)))) 

LENGTH(email) - (INSTR(email, '@') + 1) - LENGTH(SUBSTRING_INDEX(email,'.',-1)) получит длину домена минус TLD (.com, .biz etc. part), используя SUBSTRING_INDEX с отрицательным счетчиком, который будет вычисляться справа налево.

Ответ 2

Я предпочитаю:

select right(email_address, length(email_address)-INSTR(email_address, '@')) ...

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

Ответ 3

Использование SUBSTRING_INDEX для "разделения" на "@" и "." делает трюк. См. Документацию на http://dev.mysql.com/doc/refman/5.1/de/string-functions.html#idm47531853671216.

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1);

Пример:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX("[email protected]", '@', -1), '.', 1);

предоставит вам "бар".

Вот что происходит:
 * Разделить "[email protected]" на "@". → [ "foo", "bar.buz" ]
 * Выберите первый элемент справа (индекс -1). → "bar.buz"
 * Split "bar.buz" at '.' → [ "bar" , "buz" ]
 * Выберите первый элемент (индекс 1) → "bar"
Результат: "bar"

Если вам также нужно избавиться от поддоменов, используйте:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', -2), '.', 1);

Пример:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX("[email protected]", '@', -1), '.', -2), '.', 1);

предоставит вам "бар".

Ответ 5

Попробуйте это, удалите @из домена и просто покиньте домен, например: domain.com

select SUBSTR(SUBSTR(email_field, INSTR(email_field, '@'), INSTR(email_field, '.')), 2) as domain

Ответ 6

select (SUBSTRING_INDEX (SUBSTR (адрес электронной почты, INSTR (электронная почта, '@') + 1), '.', 1) from tableName)

Для некоторых операторов sql требуется имя таблицы, указанное в столбце электронной почты.

Ответ 7

Попробуйте следующее:

select SUBSTR(field_name, INSTR(field_name, '@'), INSTR(field_name, '.'))

Ответ 8

Мое предложение было бы (для mysql):

SELECT 
    LOWER(email) AS email,
    SUBSTRING_INDEX(email, '@', + 1) AS account,
 REPLACE(SUBSTRING_INDEX(email, '@', -1), CONCAT('.',SUBSTRING_INDEX(email, '.', -1)),'') -- 2nd part of mail - tld.
  AS domain,
    CONCAT('.',SUBSTRING_INDEX(email, '.', -1)) AS tld
FROM
...
ORDER BY domain, email ASC;

Ответ 9

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

select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1)) as a,count(*) as c
FROM User
group by a
order by c desc;

Результат:

введите описание изображения здесь

Ответ 10

DECLARE @Email Varchar(20)
SET @Email='[email protected]'
SELECT SUBSTRING(@Email, CHARINDEX('@',@Email)+1,LEN(@Email))

Ответ 11

DECLARE @Email Varchar(20)
SET @Email='[email protected]'
SELECT RIGHT(@Email,LEN(@Email)-CHARINDEX('@',@Email))