在 SQL 服务器上获取电子邮件域名(无 TLD)

Getting e-mail domain name (without TLD) on SQL Server

我试图只从 Email1Users 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