Sql server 查询以查找不同的电子邮件地址系列
下面的问题我需要一些帮助- 我想使用SQL查询从数据库表中查找一系列不同的电子邮件地址 我的数据库表包含电子邮件地址-Sql server 查询以查找不同的电子邮件地址系列,sql-server,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,,, 其中
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查询,这将有助于检测这样一系列的电子邮件地址。试试这个。只需替换所有数字字符并应用
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
您使用哪种RDBMS?感谢您的回复。我正在使用Microsoft SQL Server 2012…数据太大,无法传递。。希望你们能得到我的问题,找到我在问题中提到的不同系列的电子邮件地址。我的意思是样本数据就在我的问题中。无论如何,在这里ispq1@one.com pq2@one.com pq3@one.com pq4@one.com pq5@one.com pq6@one.com pq7@one.com pq8@one.com pq9@one.com pq10@one.com