对DB2 实现split的操作流程描述


  本文标签:DB2 实现split

  以下的文章主要描述的是DB2 实现split的实际操作流程,假如你对DB2 实现split的实际操作流程有兴趣了解的话,你就可以通过以下的文章对其有个更好的了解,以下就是具体方案的描述,希望在你今后的学习中会有所帮助  。

  

  请教大家一个问题,用函数实现split功能,分割字符串  。

  如 输入字符串为 a,b,c,

  实现输出结果为第一行 a

  

  第二行 b

  

  第三行 c

  

  求具体的DB2 实现函数  。

  另附 oracle的实现方法为:

  

  1. CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);  
  2. CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)  
  3. RETURN ty_str_split  
  4. IS  
  5. j INT :0;  
  6. i INT :1;  
  7. len INT :0;  
  8. len1 INT :0;  
  9. str VARCHAR2 (4000);  
  10. str_split ty_str_split :ty_str_split ();  
  11. BEGIN  
  12. len :LENGTH (p_str);  
  13. len1 :LENGTH (p_delimiter);  
  14. WHILE j < len 
  15. LOOP  
  16. :INSTR (p_str, p_delimiter, i);  
  17. IF j = 0 
  18. THEN  
  19. :len;  
  20. str :SUBSTR (p_str, i);  
  21. str_split.EXTEND;  
  22. str_split (str_split.COUNT) :str;  
  23. IF i >= len  
  24. THEN  
  25. EXIT;  
  26. END IF;  
  27. ELSE  
  28. str :SUBSTR (p_str, i, j - i);  
  29. :j + len1;  
  30. str_split.EXTEND;  
  31. str_split (str_split.COUNT) :str;  
  32. END IF;  
  33. END LOOP;  
  34. RETURN str_split;  
  35. END fn_split;  
  36. /  

  测试: SELECT * FROM TABLE (fn_split (a,b,c, ,) );

  结果:

  

  a

  

  b

  

  c

  

  最佳答案 leo

  

  可以写个udf 来进行分割, 但我更喜欢使用sql:

  

  1. with n(str, ori, pos) as (  
  2. values (abc,bc,cd,d,ff,, 1, posstr(abc,bc,cd,d,ff,, ,))  
  3. union all   
  4. select str, pos+1, locate(,, str, pos+1)  
  5. from n   
  6. where locate(,, str, pos+1)>0)  
  7. select str, ori, pos, substr(str, ori, pos-ori) as result from n   

  可以写个udf 来进行分割, 但我更喜欢使用sql:

  1. with n(str, ori, pos) as (  
  2. values (abc,bc,cd,d,ff,, 1, posstr(abc,bc,cd,d,ff,, ,))  
  3. union all   
  4. select str, pos+1, locate(,, str, pos+1)  
  5. from n   
  6. where locate(,, str, pos+1)>0)  
  7. select str, ori, pos, substr(str, ori, pos-ori) as result from n   

  以上的相关内容就是对DB2 实现split的介绍,望你能有所收获  。