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

Oracle字符串提取求助:从stack@gmail.com提取'gmail'结果异常

解决SQL提取邮箱域名前缀的问题

你原来的SQL错误在于,instr(email,'.')会匹配整个邮箱字符串里的第一个点,但你需要的是**@符号之后的第一个点**。直接用整个字符串的点位置计算截取长度,会导致截取范围超出目标部分,最终包含了.com。

修正后的SQL语句

SELECT SUBSTR(email, INSTR(email, '@') + 1, INSTR(email, '.', INSTR(email, '@') + 1) - (INSTR(email, '@') + 1)) 
FROM email;

逻辑说明

  • INSTR(email, '@') + 1:定位到@符号之后的第一个字符位置(也就是gmail的起始位置)
  • INSTR(email, '.', INSTR(email, '@') + 1):从@符号的下一位开始查找第一个点的位置(也就是gmail后面的.的位置)
  • 用后者减去前者,得到需要截取的长度(gmail的长度为5)

更简洁的替代写法(适用于支持SUBSTRING_INDEX的SQL方言,如MySQL)

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', -1), '.', 1) 
FROM email;
  • SUBSTRING_INDEX(email, '@', -1):截取@后面的全部内容,得到gmail.com
  • SUBSTRING_INDEX(..., '.', 1):截取上述结果中第一个点之前的部分,直接得到gmail

内容的提问来源于stack exchange,提问作者indianbro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:40:28