前几天碰上个小需求,截取url中的产品类目信息。产品类目的url如下(域名略)
/women-c2
/women-n25?jsort=1234
简单观察下,就是从/开始,截到-c/-n + 数字为止。
以前这种需求都是用substr加instr搞定,结果这次发现不行了,原因是因为这次截止字符不确定。考虑了下,用正则先把截止字符解析出来
select regexp_substr(request_uri,'(-c\d+|-n\d+)',1,1) from dual
找到截止字符的位置,一切就好办了,用以前的办法搞定
select substr(request_uri,2,instr(request_uri,regexp_substr(request_uri,'(-c\d+|-n\d+|-b\d+)',1,1),1,1)-2) from dual
补充下oracle里字符串处理
Oracle trim函数
trim(trailing 'h' from 'haahbbhh') 截断后面的h,最后得出haahbb
Oracle instr函数
从一个字符串中查找指定子串的位置
从字符串'yuechaotianyuechao'的第一个位置开始,查找第一个出现子串'ao'出现的位置。
SQL>select instr('yuechaotianyuechao','ao') position from dual; 返回6
从第7个字符开始搜索
SQL> select instr('yuechaotianyuechao','ao', 7) position from dual 返回17
从第1个字符开始,搜索第2次出现子串的位置
SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual; 返回17