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.comSUBSTRING_INDEX(..., '.', 1):截取上述结果中第一个点之前的部分,直接得到gmail
内容的提问来源于stack exchange,提问作者indianbro
相关产品推荐
相关产品推荐

