DB2 SQL语句字符匹配经验

本文介绍了一种使用SQL从文本字段中精确截取特定URL及其参数的方法。通过定位URL并根据参数特征进行截断,实现了从复杂文本中提取URL的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做的需求需要使用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))


这样应该无问题了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值