1

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

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

更新: 修正了格式,应该是<>第一个。

4

4 回答 4

1

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

email = row.email
parts = email.split(" ")
real_email = parts[ len(parts) - 1 ]
于 2009-05-19T00:47:47.763 回答
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 + '>'
于 2009-05-19T03:59:47.483 回答
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. 再次反转字符串,以正确的顺序放置。

可能有更优雅的方法来做这件事,但这会起作用,因此您可以将它用于 JOIN 的一侧。它之所以有效,是因为电子邮件地址不能包含空格,因此最后一个空格(或反转它时的第一个空格)将是您的实际电子邮件地址和友好地址之间的分隔符。据我所知,TSQL 不包含 LastIndexOf() 函数,这对于避免双重 Reverse() 函数调用很方便。

于 2009-05-19T01:04:00.960 回答
0

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

 SELECT * FROM table1 JOIN table2 ON (LOCATE(table2.real_email, table1.friend_email) > 0) 
于 2009-05-19T01:08:26.707 回答