我需要一些关于以下问题的帮助 -
我想使用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查询,这有助于检测这类系列的电子邮件地址。
答案 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