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,检索第二个到第三“/”间的值,可得到如下结果:
集算器提供 JDBC 接口,可以像数据库一样嵌入到应用程序中,用起来很简单,详细可参考【Java 如何调用 SPL 脚本】。