一张桌子有“ John Doe <jdoe@aol.com>
”,而另一张桌子有“ jdoe@aol.com
”。是否有 UDF 或替代方法可以将第一个字段中的电子邮件地址与第二个字段匹配?
这不会是生产代码,我只需要它来运行临时分析。很遗憾,数据库不存储友好和非友好的电子邮件地址。
更新: 修正了格式,应该是<
和>
第一个。
一张桌子有“ John Doe <jdoe@aol.com>
”,而另一张桌子有“ jdoe@aol.com
”。是否有 UDF 或替代方法可以将第一个字段中的电子邮件地址与第二个字段匹配?
这不会是生产代码,我只需要它来运行临时分析。很遗憾,数据库不存储友好和非友好的电子邮件地址。
更新: 修正了格式,应该是<
和>
第一个。
我会在最后一个空格上拆分电子邮件地址——这应该给你电子邮件地址。确切的代码将取决于您的数据库,但有一些粗略的伪代码:
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
讲逻辑:
可能有更优雅的方法来做这件事,但这会起作用,因此您可以将它用于 JOIN 的一侧。它之所以有效,是因为电子邮件地址不能包含空格,因此最后一个空格(或反转它时的第一个空格)将是您的实际电子邮件地址和友好地址之间的分隔符。据我所知,TSQL 不包含 LastIndexOf() 函数,这对于避免双重 Reverse() 函数调用很方便。
您可以使用 LOCATE 方法进行连接,例如...
SELECT * FROM table1 JOIN table2 ON (LOCATE(table2.real_email, table1.friend_email) > 0)