You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:09:40