查询以查找不同的电子邮件地址系列

时间:2015-04-02 07:55:12

标签: sql-server

我需要一些关于以下问题的帮助 -

我想使用SQL查询从数据库表中找到一系列不同的电子邮件地址。

我的数据库表包含电子邮件地址 -

abc1@..com,
abc2@..com,
.
.
.
.
f1@..com,
f2@..com,
f3@..com
.
.
.
xyzpqr1@..com,
xyzpqr2@..com
.
.

这些电子邮件系列模式总是不同,但它们共享共同的系列模式,例如数字1到10,例如pq1@..com,pq2@..com,pq3@..com,...,pq10@..com,,, 文本“pq”可以是任何随机文本。而且数字(在上述情况下为1到10)也是随机的。

我们可以通过复制excel中的数据然后手动检查每个记录来检测此系列。但这不是可行的解决方案

所以我认为有人可以提出SQL查询,这有助于检测这类系列的电子邮件地址。

1 个答案:

答案 0 :(得分:1)

试试这个。只需替换所有数字字符并应用RANK窗口功能。 rank列会将您的电子邮件分组:

DECLARE @t TABLE ( email NVARCHAR(MAX) )

INSERT  INTO @t
VALUES  ( 'some1@gmail.com' ),
        ( 'some2@gmail.com' ),
        ( 'some3@gmail.com' ),
        ( 'someother1@gmail.com' ),
        ( 'someother2@gmail.com' );

WITH    cte1
          AS ( SELECT   email ,
                        REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(email,
                                                              '1', ''), '2',
                                                              ''), '3', ''),
                                                              '4', ''), '5',
                                                              ''), '6', ''),
                                                        '7', ''), '8', ''),
                                        '9', ''), '0', '') AS newemail
               FROM     @t
             ),
        cte2
          AS ( SELECT   * ,
                        RANK() OVER ( ORDER BY newemail ) AS rank
               FROM     cte1
             )
    SELECT  * FROM    cte2

输出:

email                  newemail             rank
some1@gmail.com        some@gmail.com       1
some2@gmail.com        some@gmail.com       1
some3@gmail.com        some@gmail.com       1
someother1@gmail.com   someother@gmail.com  4
someother2@gmail.com   someother@gmail.com  4