【发布时间】:2019-10-04 21:41:34
【问题描述】:
我正在尝试从我的数据库的 Users 表中的 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
知道我的查询有什么问题吗?
【问题讨论】:
-
带有子域或 2 个扩展名的电子邮件地址呢? IE。
def@dba.stackexchange.com或xxx@msn.co.uk甚至abc123@mail.yahoo.co.uk?你对这些有什么期望?将文本剥离到 @并包括在内很容易,但您不能假设最后一个.之后的值是扩展名。 -
好问题。在这种情况下,我只需从
"@"删除到它之后的第一个" . "。我想要的只是计算这些,过滤掉yahoo.se、yahoo.in、yahoo.com之类的情况,只留下yahoo -
小心你使用它的目的。我可以轻松地创建一个 gmail.example.com 的电子邮件地址,您的解决方案将输出“gmail”。你不能对不完整的域名做出很多假设。
-
感谢@Grax 的提示
标签: sql-server trim charindex