Как сопоставить два поля электронной почты, одно из которых содержит удобный адрес электронной почты

StackOverflow https://stackoverflow.com/questions/880456

Вопрос

В одной таблице есть "John Doe <jdoe@aol.com>" в то время как у другого есть "jdoe@aol.com".Существует ли UDF или альтернативный метод, который сопоставит адрес электронной почты из первого поля со вторым полем?

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

Обновить: Исправлено форматирование, должно быть < и > на первом из них.

Это было полезно?

Решение

Вы могли бы выполнить объединение, используя метод LOCATE, что-то вроде...

 SELECT * FROM table1 JOIN table2 ON (LOCATE(table2.real_email, table1.friend_email) > 0) 

Другие советы

Я бы разделил адреса электронной почты на последнем месте - это должно дать вам адрес электронной почты.Точный код будет зависеть от вашей базы данных, но какой-то грубый псевдокод:

email = row.email
parts = email.split(" ")
real_email = parts[ len(parts) - 1 ]

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

SELECT
     T1.nonfriendly_email_address,
     T2.friendly_email_address
FROM
     My_Table T1
INNER JOIN My_Table T2 ON
     T2.friendly_email_address LIKE '%<' + T1.nonfriendly_email_address + '>'

Возможно, следующий код TSQL может вам помочь:

DECLARE @email varchar(200)
SELECT @email = 'John Doe jdoe@aol.com'

SELECT REVERSE(SUBSTRING(REVERSE(@email), 0,CHARINDEX(' ', REVERSE(@email))))

Это утверждение возвращает:

jdoe@aol.com

Рассуждая с помощью логики:

  1. Переверните столбец электронной почты
  2. Найдите индекс первого символа ' ' ...все, что до этого момента было вашим фактическим адресом электронной почты
  3. Подстройте столбец, начиная с начала (перевернутой) строки, к индексу, найденному на шаге 2.
  4. Переверните строку еще раз, расположив ее в правильном порядке.

Могли бы быть более элегантные способы сделать это, но это сработало бы, и поэтому вы могли бы использовать его для одной стороны вашего СОЕДИНЕНИЯ.Это работает, потому что адреса электронной почты не могут содержать пробелов, поэтому последний пробел (или первый, когда вы меняете его местами) будет разделителем между вашим фактическим адресом электронной почты и удобным.Насколько я знаю, TSQL не содержит функции lastIndexOf(), которая была бы удобна, чтобы избежать двойных вызовов функции Reverse().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top