MySQL 获取字符串最后一次出现的位置

方法一:

思路:先将字符串反转(reverse),然后用locate查询目标字符的位置,再截取目标字符之前的字符,剩余的字符串长度就是最后一次出现目标字符的位置。

注意:此方法仅适用于查询单个字符的最后位置,可以指定开始位置

-- Oracle
select instr('zcxvsd1sa','s',-1) FROM dual;  -- 8
select instr('zcxvsd1sa','s',-2) FROM dual;  -- 8
select instr('zcxvsd1sa','s',-3) FROM dual;  -- 5

-- MySQL
select char_length(substr('zcxvsd1sa',locate('s',reverse('zcxvsd1sa'),1)));  -- 8
select char_length(substr('zcxvsd1sa',locate('s',reverse('zcxvsd1sa'),2)));  -- 8
select char_length(substr('zcxvsd1sa',locate('s',reverse('zcxvsd1sa'),3)));  -- 5

方法二:

思路:通过substring_index()截取目标之后的所有字符,字符位置 = 原有字符长度 - 截取字符长度 - 目标字符长度 + 1。

注意:此方法支持字符串位置查询,但无法指定开始位置

-- Oracle
SELECT instr('www.ccffftech.com.cc.dd','.cc',-1) FROM dual;  -- 18

-- MySQL
select char_length('www.ccffftech.com.cc.dd') - char_length(substring_index('www.ccffftech.com.cc.dd','.cc',-1)) - char_length('.cc') + 1;  -- 18

方法一与方法二的适用情况刚好相反,请根据具体的需求选择方法。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐