如何在Google Big Query中从电子邮件地址中提取电子邮件域名

4

我有一堆客户数据,正在试图在Big Query中找到一种方法来提取电子邮件域名(例如test@yahoo.com中的yahoo.com),但是我使用普通SQL尝试的任何尝试似乎都不起作用,因为它们不支持CHARINDEX,而任何子字符串只能基于数字值创建。

有人有任何想法吗?

谢谢,

Matt

4个回答

15

你可以使用 REGEXP_EXTRACT 函数 --

SELECT REGEXP_EXTRACT('matt@yahoo.com', r'@(.+)');

将会给出 'yahoo.com'。


2
这是我认为迄今为止最简单的方法:

SPLIT(email_address, '@')[SAFE_OFFSET(1)] as domain

1
最好使用SAFE_OFFSET - iDrwish

1
这是 SQL 查询,可能会对某些人有帮助。
declare @email varchar(50) ='Abcxyz@subdomain.domain.com';
SELECT SUBSTRING(@email, CHARINDEX('@', @email) + 1, LEN(@email) - CHARINDEX('@', @email) + 1) AS domain_name

Output subdomain.domain.com

DECLARE @var varchar(50) ='test@subdoamin.domain.com';
SELECT 
SUBSTRING(@var,0,charindex('@',@var)) as UserName,
Substring(@var,charindex('@',@var)+1,charindex('.',@var,charindex('@',@var,0))-(charindex('@',@var)+1)) as SubDomain,
substring(@var,charindex('.',@var,charindex('@',@var))+1,len(@var)) as DomainName

输出

输出 在此输入图片描述


0

如果你不想要 ".com",我认为这是最好的选择。

SELECT REGEXP_EXTRACT("matt@yahoo.com", "@(\\w+)") AS domain;

只会给你"yahoo"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接