在 SQL 服务器上获取电子邮件域名(无 TLD)
Getting e-mail domain name (without TLD) on SQL Server
我试图只从 Email1 列 Users table 我的数据库。
UserId Email1
1 abc@gmail.com
2 xyz@google.com
3 xyz@abc.com
4 abc@xyz.com
5 123@whosebug.com
当我运行这个查询时:
SELECT LEFT( RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1)),
CHARINDEX('.', RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1))))
as EmailNamePart FROM Users
我得到以下信息:
gmail.
google.
abc.
xyz.
Whosebug.
而预期结果应该是:
gmail
google
abc
xyz
Whosebug
知道我的查询有什么问题吗?
根据您的评论 "In this case I would just remove from "@“第一个”。 "" 这会让你得到你想要的,但不确定它是否是你 真正 想要的:
WITH VTE AS(
SELECT *
FROM (VALUES('abc@gmail.com'),
('xyz@google.com'),
('xyz@abc.com'),
('abc@xyz.com'),
('123@whosebug.com'),
('def@dba.stackexchange.com'),
('xx@msn.co.uk'),
('abc123@mail.yahoo.co.uk'))V(Email))
SELECT LEFT(D.Domain,CI.Extension-1) AS SubDomain
FROM VTE V
CROSS APPLY (VALUES(STUFF(V.Email, 1,CHARINDEX('@',Email),'')))D(Domain)
CROSS APPLY (VALUES(CHARINDEX('.',D.Domain)))CI(Extension);
输出:
SubDomain
-----------
gmail
google
abc
xyz
Whosebug
dba
msn
mail
试试这个:
-- 如果你只想要第一个点--
select SUBSTRING(Email1, CHARINDEX('@', Email1)+1,
CHARINDEX('.', V.Email, CHARINDEX('@', Email1))-CHARINDEX('@', Email1)-1) as
EmailNamePart FROM Users
-- 如果你想要最后一个点--
select SUBSTRING(Email1, CHARINDEX('@', Email1)+1,
(charindex('.', reverse(Email1) + '0') - len(Email1))*-1-(CHARINDEX('@', Email1)))
as EmailNamePart FROM Users
我试图只从 Email1 列 Users table 我的数据库。
UserId Email1
1 abc@gmail.com
2 xyz@google.com
3 xyz@abc.com
4 abc@xyz.com
5 123@whosebug.com
当我运行这个查询时:
SELECT LEFT( RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1)),
CHARINDEX('.', RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1))))
as EmailNamePart FROM Users
我得到以下信息:
gmail.
google.
abc.
xyz.
Whosebug.
而预期结果应该是:
gmail
google
abc
xyz
Whosebug
知道我的查询有什么问题吗?
根据您的评论 "In this case I would just remove from "@“第一个”。 "" 这会让你得到你想要的,但不确定它是否是你 真正 想要的:
WITH VTE AS(
SELECT *
FROM (VALUES('abc@gmail.com'),
('xyz@google.com'),
('xyz@abc.com'),
('abc@xyz.com'),
('123@whosebug.com'),
('def@dba.stackexchange.com'),
('xx@msn.co.uk'),
('abc123@mail.yahoo.co.uk'))V(Email))
SELECT LEFT(D.Domain,CI.Extension-1) AS SubDomain
FROM VTE V
CROSS APPLY (VALUES(STUFF(V.Email, 1,CHARINDEX('@',Email),'')))D(Domain)
CROSS APPLY (VALUES(CHARINDEX('.',D.Domain)))CI(Extension);
输出:
SubDomain
-----------
gmail
google
abc
xyz
Whosebug
dba
msn
mail
试试这个:
-- 如果你只想要第一个点--
select SUBSTRING(Email1, CHARINDEX('@', Email1)+1,
CHARINDEX('.', V.Email, CHARINDEX('@', Email1))-CHARINDEX('@', Email1)-1) as
EmailNamePart FROM Users
-- 如果你想要最后一个点--
select SUBSTRING(Email1, CHARINDEX('@', Email1)+1,
(charindex('.', reverse(Email1) + '0') - len(Email1))*-1-(CHARINDEX('@', Email1)))
as EmailNamePart FROM Users