Как удалить теги «плюс» с адресов электронной почты в запросе MySQL? - PullRequest
1 голос
/ 28 апреля 2020

У меня есть таблица с адресами электронной почты, где некоторые из них содержат теги «плюс» - например,

email
----------------------
user1@example.com
user2@example.org
user1+test@example.com

Мне нужно иметь возможность запросить таблицу и получить адреса электронной почты без тегов:

email
----------------------
user1@example.com
user2@example.org
user1@example.com

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Если вы используете MySQL 8.0, вы можете использовать regexp_replace() для этого:

select
    email,
    regexp_replace(email, '\\+[^@].*@+', '@') new_email
from mytable

Это означает следующее: подавление любой последовательности символов, начиная с '+' до '@'. Если совпадений нет, regexp_replace() оставляет строку без изменений.

Демонстрация на DB Fiddle :

with mytable as (
    select 'user1@example.org' email
    union all select 'user2@example.org'
    union all select 'user1+test@example.com'
)
select
    email,
    regexp_replace(email, '\\+[^@].*@+', '@') new_email
from mytable;

| email                  | new_email         |
| ---------------------- | ----------------- |
| user1@example.org      | user1@example.org |
| user2@example.org      | user2@example.org |
| user1+test@example.com | user1@example.com |
0 голосов
/ 28 апреля 2020

Этот запрос удаляет тег с адресов электронной почты во всех версиях MySQL:

SELECT IF(LOCATE('+', email) = 0, 
  email,
  CONCAT(
    SUBSTRING(email, 1, LOCATE('+', email) - 1), 
    SUBSTRING(email, LOCATE('@', email))))
FROM my_table; 

В Engli sh: если в адресе электронной почты нет +, просто используйте Адрес электронной почты; в противном случае объедините текст слева от + с текстом от @ до конца строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...