DB2 中取指定位置或分隔符间的子串

在 DB2 中,对于包含多个 '/' 的字符串,如何获取任意两个 '/' 之间的子串?可以利用 DB2 的 locate 函数结合 substr 进行截取。例如,获取第一个和第二个 '/' 之间的子串,可以使用 SQL 查询。然而,对于更复杂的场景,如获取第 n 个到第 n+1 个 '/' 之间的子串,SQL 实现较为繁琐。推荐使用 SPL 语言,通过其简洁的语法可以方便地实现此类计算。集算器提供了 JDBC 接口,便于在 Java 应用中调用 SPL 脚本。
摘要由CSDN通过智能技术生成

【问题】

我有 N 个字符串

aaa/bbb/ccc/ddd/eee  
aaa/bbb/ccc  
aaa/bbb/ccc/xxx/123 

db2 中如何得到第一个 / 和第二个 / 的位置,然后把第一个和第二个 /  / 之间的值拿到,或者 2 到 3 以此类推? 谢谢

【回答】

可以尝试 DB2 提供的 locate 函数,结合 substr 进行字符串截取来完成,比如要拿到第一个和第二个之间的串可以这样写:

select substr(str,locate(‘/’,str)+1,locate(‘/’,str,locate(‘/’,str)+1-locate(‘/’,str))-1) from stb

由于 locate 函数的第三个参数是查询起始位置,所以查找第 2 个以及第 n 个“/”得嵌套完成,因此用 SQL 很难写出一个(接收起始位置参数)通用的语句,而存储过程的写法则更不简单。

这种麻烦的运算建议用 SPL 来做,完成上述计算,写出通用的脚本非常简单:

A
1$select str from stb
2=A1.(str.array("/")(begin+1))

其中,begin 为指定的起始位置,如 begin=2,检索第二个到第三“/”间的值,可得到如下结果:

集算器提供 JDBC 接口,可以像数据库一样嵌入到应用程序中,用起来很简单,详细可参考【Java 如何调用 SPL 脚本】。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值