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

【问题】

我有 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,检索第二个到第三“/”间的值,可得到如下结果:

imagepng

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