Oracle SQL正则表达式提取多邮箱单元格中的所有域名
Oracle SQL提取多邮箱单元格中的所有域名
这个场景很典型——当单个单元格里包含多个用空格分隔的邮箱地址时,普通的SUBSTR(email, INSTR(email,'@',1,1))只能处理单个邮箱,得先把多个邮箱拆分成独立的行,再逐个提取域名。这里给你一套可以直接用的Oracle SQL方案:
解决方案代码
WITH split_email_rows AS ( -- 第一步:把每个单元格里的多个邮箱按空格拆分成单独的行 SELECT REGEXP_SUBSTR(email, '[^ ]+', 1, LEVEL) AS individual_email FROM your_table_name -- 替换成你的实际表名 CONNECT BY LEVEL <= REGEXP_COUNT(email, '[^ ]+') -- 按空格分隔的邮箱数量生成对应行数 AND PRIOR email = email AND PRIOR SYS_GUID() IS NOT NULL -- 防止递归查询出现循环重复 ) -- 第二步:对每个拆分后的邮箱提取@之后的域名部分 SELECT SUBSTR(individual_email, INSTR(individual_email, '@') + 1) AS email_domain FROM split_email_rows WHERE individual_email IS NOT NULL; -- 过滤掉可能的空值(如果单元格有多余空格的话)
代码说明
REGEXP_SUBSTR(email, '[^ ]+', 1, LEVEL):按空格作为分隔符,逐个提取单元格里的每个邮箱地址,LEVEL参数控制提取第N个邮箱。REGEXP_COUNT(email, '[^ ]+'):统计当前单元格里有多少个用空格分隔的邮箱,用来控制递归生成的行数。SUBSTR(individual_email, INSTR(individual_email, '@') + 1):和你原来的思路一致,找到@的位置后,提取它后面的所有字符(也就是域名)。
把your_table_name替换成你的实际表名之后,执行这段SQL就能得到你想要的输出:
gmail.com gmail.com yahoo.com
内容的提问来源于stack exchange,提问作者Thilak R
相关产品推荐
相关产品推荐

