以下的文章主要描述的是DB2 实现split的实际操作流程,假如你对DB2 实现split的实际操作流程有兴趣了解的话,你就可以通过以下的文章对其有个更好的了解,以下就是具体方案的描述,希望在你今后的学习中会有所帮助。
请教大家一个问题,用函数实现split功能,分割字符串。
如 输入字符串为 'a,b,c',
实现输出结果为第一行 a
第二行 b
第三行 c
求具体的DB2 实现函数。
另附 oracle的实现方法为:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_str_split ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str;
IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP;
RETURN str_split;
END fn_split;
/
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
测试: SELECT * FROM TABLE (fn_split ('a,b,c', ',') );
结果:
a
b
c
最佳答案 leo
可以写个udf 来进行分割, 但我更喜欢使用sql:
with n(str, ori, pos) as (
values ('abc,bc,cd,d,ff,', 1, posstr('abc,bc,cd,d,ff,', ','))
union all
select str, pos+1, locate(',', str, pos+1)
from n
where locate(',', str, pos+1)>0)
select str, ori, pos, substr(str, ori, pos-ori) as result from n
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
可以写个udf 来进行分割, 但我更喜欢使用sql:
with n(str, ori, pos) as (
values ('abc,bc,cd,d,ff,', 1, posstr('abc,bc,cd,d,ff,', ','))
union all
select str, pos+1, locate(',', str, pos+1)
from n
where locate(',', str, pos+1)>0)
select str, ori, pos, substr(str, ori, pos-ori) as result from n
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
以上的相关内容就是对DB2 实现split的介绍,望你能有所收获。
【编辑推荐】
- DB2 存储过程的异常处理器类型有几种?
- 对DB2 增量备份的正确运用描述
- DB2 并行版本中的查询优化登峰造极!
- IBM DB2数据库与注意事项_DB2编程的描述
- DB2性能优化之设计DB2配置数据库很好用!