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 怎么拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章