我只想从我的数据库的Email1列中的用户表中获取域名。
UserId Email1
1 abc@gmail.com
2 xyz@google.com
3 xyz@abc.com
4 abc@xyz.com
5 123@stackoverflow.com当我运行这个查询时:
SELECT LEFT( RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1)),
CHARINDEX('.', RIGHT(Email1, LEN(Email1)-CHARINDEX('@', Email1))))
as EmailNamePart FROM Users 我得到以下信息:
gmail.
google.
abc.
xyz.
stackoverflow.预期结果应是:
gmail
google
abc
xyz
stackoverflow有什么线索吗?我的问题是什么?
发布于 2019-05-17 14:44:42
试试这个:
--如果你只想要第一个点--
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发布于 2019-05-17 14:36:35
根据您的评论“在本例中,我只需删除"@”到“第一个”。"“这会让你得到你想要的东西,但不确定你真正想要的是什么:
WITH VTE AS(
SELECT *
FROM (VALUES('abc@gmail.com'),
('xyz@google.com'),
('xyz@abc.com'),
('abc@xyz.com'),
('123@stackoverflow.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
stackoverflow
dba
msn
mailhttps://stackoverflow.com/questions/56188409
复制相似问题