如何匹配两个包含友好电子邮件地址的电子邮件字段

时间:2009-05-19 00:32:45

标签: sql sql-server tsql function user-defined-functions

一个表格为“John Doe <jdoe@aol.com>”,而另一个表格为“jdoe@aol.com”。是否有一个UDF或替代方法,它将第一个字段中的电子邮件地址与第二个字段匹配?

这不是生产代码,我只需要它来运行临时分析。遗憾的是,DB不存储友好和非友好的电子邮件地址。

更新:修正了格式,第一个格式应为<>

4 个答案:

答案 0 :(得分:1)

我会在最后一个空格中拆分电子邮件地址 - 这应该会给你电子邮件地址。确切的代码取决于您的数据库,但有些粗略的伪代码:

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

答案 1 :(得分: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 + '>'

答案 2 :(得分:0)

以下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. 再次反转字符串,按正确的顺序排列。
  5. 可能有更优雅的方法,但这样可行,因此您可以将它用于JOIN的一侧。 它的工作原理是因为电子邮件地址不能包含空格,因此最后一个空格(或者当你将其反转时)将是实际电子邮件地址和友好电子邮件地址之间的分隔符。 据我所知,TSQL不包含LastIndexOf()函数,这样可以避免双重Reverse()函数调用。

答案 3 :(得分:0)

您可以使用LOCATE方法进行连接,例如......

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