Как сопоставить два поля электронной почты, где одно содержит дружественный адрес электронной почты - PullRequest
1 голос
/ 19 мая 2009

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

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

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

Ответы [ 4 ]

1 голос
/ 19 мая 2009

Вы должны иметь возможность использовать ключевое слово 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 + '>'
1 голос
/ 19 мая 2009

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

email = row.email
parts = email.split(" ")
real_email = parts[ len(parts) - 1 ]
0 голосов
/ 19 мая 2009

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

 SELECT * FROM table1 JOIN table2 ON (LOCATE(table2.real_email, table1.friend_email) > 0) 
0 голосов
/ 19 мая 2009

Возможно, вам поможет следующий код 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. Снова переверните строку, расположив ее в правильном порядке.

Могут быть более элегантные способы сделать это, но это сработает, и поэтому вы можете использовать его для одной стороны вашего JOIN. Это работает, потому что адреса электронной почты не могут содержать пробелы, поэтому последний пробел (или первый, когда вы меняете его) будет разделителем между вашим реальным и дружественным адресом электронной почты. Насколько я знаю, TSQL не содержит функцию LastIndexOf (), которая была бы полезна, чтобы избежать двойного вызова функции Reverse ().

...