题解 | 最后一个匹配上的位置
最后一个匹配上的位置
https://www.nowcoder.com/practice/5e87faefae1946d997be6eb98c2a5359
1、instr函数只能找出第一次出现特定字符串的位置,但该题目要求找出最后一次出现特定字符串的位置;
2、这个时候就需要采用逆向思维,将字符串反转,这样就能找出‘cba’第一次出现的字符串的位置,即c的位置;
3、由此定位出‘abc’最后一次出现的位置:n-反转后第一次出现的位置-1(n为字符串长度);
4、为什么要减1?因为instr会定位到‘cba’第一次出现的位置,即c的位置,用n减去c的位置,则会得到正常排序中b的位置(倒数第一为n,倒数第二为n-1,以此类推),想得到a的位置,需要再减1。
select device_id,char_length(nick_name)-instr(reverse(nick_name),'cba')-1 last_idx,substr(nick_name,char_length(nick_name)-instr(reverse(nick_name),'cba')-1) check_str from user_submit where nick_name like '%abc%' order by device_id desc;
