ORACLE 怎么拆分字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 怎么拆分字符串相关的知识,希望对你有一定的参考价值。

拆分sql后:

select 

substr('Hello World',0,instr('Hello World','o')) as 首,

substr('Hello World',instr('Hello World','o')+1) as 尾

from dual;





有什么规定吗?

“ABCDEFGH”或是“A,B,C,D,E,F,G,H"

按符号拆分?按位置拆分?

substr()函数:截取a-b之间的或a 。如:substr('Hello World',0,5)截取1-5或

substr('Hello World',0,instr('Hello World','o'))截取1-"o"的位置

1.如果是","等符号:

select substr('Hello World',0,instr('Hello World','o'))  from dual;

select substr('Hello World',instr('Hello World','o')+1)  from dual;

select substr('Hello World',instr('Hello World','o')+1,length('Hello World'))  from dual;

参考技术A 代码如下:
CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN str_split
PIPELINED
AS
v_length NUMBER := LENGTH(p_string);
v_start NUMBER := 1;
v_index NUMBER;
BEGIN
WHILE(v_start <= v_length)
LOOP
v_index := INSTR(p_string, p_delimiter, v_start);

IF v_index = 0
THEN
PIPE ROW(SUBSTR(p_string, v_start));
v_start := v_length + 1;
ELSE
PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
v_start := v_index + 1;
END IF;
END LOOP;

RETURN;
END splitstr;

创建完毕后,我们来测试一下,例如执行如下SQL:
select * from table(splitstr('Hello,Cnblogs!',','));本回答被提问者和网友采纳
参考技术B http://www.cnblogs.com/nicholas_f/articles/1526063.html

oracle之字符串拆分

 

在工作当中发现oracle没有提供字符串切割函数,在网上找到一个比好的切割方式,记录一下:

1.新建数据类型

CREATE OR REPLACE TYPE STR_SPLIT AS TABLE OF VARCHAR2(500);

2.新建切割函数

CREATE OR REPLACE FUNCTION SPLITSTR(P_STRING
  IN VARCHAR2, 

 P_DELIMITER IN VARCHAR2) 

 RETURN STR_SPLIT 

 PIPELINED IS 

 V_LENGTH NUMBER := LENGTH(P_STRING); 

 V_START NUMBER := 1; 

 V_INDEX NUMBER; 

BEGIN 

 WHILE (V_START <= V_LENGTH) LOOP 

 V_INDEX := INSTR(P_STRING, P_DELIMITER, V_START); 

 IF V_INDEX = 0 THEN 

 PIPE ROW(SUBSTR(P_STRING, V_START)); 

 V_START := V_LENGTH + 1; 

 ELSE 

 PIPE ROW(SUBSTR(P_STRING, V_START, V_INDEX - V_START)); 

 V_START := V_INDEX + 1; 

 END IF; 

 END LOOP; 

 RETURN; 

END SPLITSTR; 

3.进行测试

select * from table(splitstr(Hello,Cnblogs!,,)); 

4.将行转为列显示

SELECT A.COLUMN_VALUE V1, B.COLUMN_VALUE V2
  FROM (SELECT *
          FROM (SELECT ROWNUM RN, T.*
                  FROM TABLE(SPLITSTR(Hello,Cnblogs!, ,)) T)) A,
       (SELECT *
          FROM (SELECT ROWNUM RN, T.*
                  FROM TABLE(SPLITSTR(Hello,Cnblogs!, ,)) T)) B
 WHERE A.RN = 1
   AND B.RN = 2;

待补充测试结果


以上是关于ORACLE 怎么拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

oracle根据某个字符拆分字符串

如何把oracle中查询出来的一列进行拆分。如查出结果为1@2@3@4,如何拆分成 1 2 3

寻找函数拆分字符串Oracle

在Oracle中将字符串拆分为多行

在Oracle中将字符串拆分为多行

在Oracle中将字符串拆分为多行