最近做的需求需要使用SQL语句在A表的text字段中筛选出一段URL的后面部分。
研究了URL的样本,归纳出来是长这样
www.test.com/my.html?XXX
其中前面 www.test.com/my.html? 这一段是固定的,后面XXX是参数,参数是数字或者大小写字母,长度是1-3
text字段有可能是这样
我这里有一个网站,请点击www.test.com/my.html?QAQ。快来试试吧。
需要拿到的url是/my.html?QAQ
对这段处理的思路是这样,首先要把出现/my.html?找出来,再根据最后出现数字或大小写字母的位置来截取
--找出/my.html?
使用 locate 与 substr 结合
substr(text,locate('m/my.html?',text)+1,9) 即可取到 text字段中的 /my.html?
-- 根据截图子串最后出现是否为数字或大小写字母判断
用到CASE WHEN THEN ELSE 和 translate函数判断
CASE
WHEN locate('m/my.html?',text)=0
THEN ‘’
WHEN translate(substr(text,locate('m/my.html?',text)+1,12),'','/.?0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') = ''
THEN trim(substr(text,locate('m/my.html?',text)+1,12))
WHEN translate(substr(text,locate('m/my.html?',text)+1,11),'','/.?0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz') = ''
THEN trim(substr(text,locate('m/my.html?',text)+1,11))
ELSE trim(substr(text,locate('m/my.html?',text)+1,10))
这样应该无问题了