【问题标题】:How to match two email fields where one contains friendly email address如何匹配两个包含友好电子邮件地址的电子邮件字段
【发布时间】:2010-10-27 04:45:33
【问题描述】:

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

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

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

【问题讨论】:

  • 嗨,iamgoat。我注意到在查看您的个人资料时,您尚未对任何答案进行投票。如果您发现答案有帮助,请投票。同样,如果您发现它没有帮助,请投反对票。 :)

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


【解决方案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】:

    也许下面的 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() 函数调用很方便。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 据我所知,TSQL中没有LOCATE函数?
      • SELECT * FROM table1 JOIN table2 ON CHARINDEX((table2.real_email , table1.friend_email) > 0) 我对 TSQL 一无所知,所以也可以关闭。让我知道我是否会再次无用。
      • 完美,这行得通:SELECT * FROM table1 tb1 JOIN table2 tb2 ON CHARINDEX(tb1.real_email, tb2.friend_email) > 0
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-20
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 2012-02-06
        • 2018-04-16
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多