SQL код для идентификации локальной части адреса электронной почты - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь написать SQL код, чтобы идентифицировать локальную часть адреса электронной почты в нескольких вариациях и возвращать только символы (удаляя любые лишние периоды или + некоторые расширения).

Пример:

firstlast@gmail.com
firstlast+2020@gmail.com
fir.st.la.st@gmail.com

Если все вернутся:

firstlast@gmail.com

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

Ответы [ 2 ]

1 голос
/ 27 января 2020

Я считаю, что вы хотите реализовать следующие правила:

  • Удалить периоды до @.
  • Если есть + до @, только перед этим используйте символ.
  • Разрешены все допустимые символы электронной почты, включая (как минимум) буквы, цифры и подчеркивание.

Следующие правила реализуют эти правила:

select concat(replace(substring_index(substring_index(email, '@', 1), '+', 1), '.', ''), substring_index(email, '@', -1))
1 голос
/ 27 января 2020

В MySQL 8.0+ вы можете использовать SUBSTRING_INDEX, чтобы разбить строку на части до и после @, а затем использовать REGEXP_REPLACE на первая часть, чтобы удалить . s или символы после (и включая) a +. Например:

create table data (email varchar(30));
insert into data values
('firstlast@gmail.com'),
('firstlast+2020@gmail.com'),
('fir.st.la.st@gmail.com');
select concat(regexp_replace(substring_index(email, '@', 1), '\\.|\\+.*$', ''), 
              '@',
              substring_index(email, '@', -1))
from data

Вывод:

firstlast@gmail.com
firstlast@gmail.com
firstlast@gmail.com

Демонстрация на dbfiddle.com

...