重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

oracle如何切分函数,oracle切割

oracle中怎样分割字符串

分割字符串用substr函数即可。

公司主营业务:成都网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出左云免费做网站回馈大家。

如:字符串为abc123,现在要截取成abc和123。

select substr('abc123',1,3),substr('abc123',4,3) from dual;

函数说明:

substr('abc123',1,3)

其中abc123是要被截取的字符串,1,代表从第一位开始截取,3代表要截取的长度。

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;

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

通过instr和truncate函数进行拆分。

instr得到各个顺序的@的位置,truncate通过得到的位置情况进行字符串截取。

【oracle】:字符串分割的函数讲解

-- 定义一个对象类型.

CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000));

/

-- 定义一个 表/数组类型, 内容是前面定义的那个对象.

CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split;

/

--------------------

-- 字符分割函数.

-- 参数1:  被分割的源字符串

-- 参数2:  用于拆分的字符串。

--------------------

CREATE OR REPLACE FUNCTION fn_split(

p_str       IN VARCHAR2,

p_delimiter IN VARCHAR2)

RETURN ty_tbl_str_split IS

j         INT := 0;

i         INT := 1;

-- 被分割的源字符串 的长度.

len       INT := 0;

-- 分隔字符串的长度

len1      INT := 0;

-- 暂存的中间每一个单元的文本信息.

str       VARCHAR2(4000);

-- 预期返回结果.

str_split ty_tbl_str_split := ty_tbl_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=0 意味着没有找到.

  -- 可以理解为是查询到最后一个单元了.

  -- 设置 j := len, 让外部的循环处理可以结束了.

j  := len;

-- 获取最后一个单元的内容.

str := SUBSTR(p_str, i);

-- 结果追加一行.

str_split.EXTEND;

-- 设置结果内容.

str_split(str_split.COUNT) := ty_row_str_split(strValue = str);

IF i = len THEN

EXIT;

END IF;

ELSE

-- 如果在被分割的源字符串中,找到了 分隔字符串.

-- 首先,获取分割的内容.

str := SUBSTR(p_str, i, j - i);

-- 然后设置索引, 下一次再查找的时候,从指定的索引位置开始(不是从0开始找了)

i := j + len1;

-- 结果追加一行.

str_split.EXTEND;

-- 设置结果内容.

str_split(str_split.COUNT) := ty_row_str_split(strValue = str);

END IF;

END LOOP;

RETURN str_split;

END fn_split;

/

函数创建完毕以后,可以开始做查询的处理.

SQL select to_char(strvalue) as Value from table(fn_split('aa,bb,cc',','));

VALUE

-------------------------------------------------------------------------------

aa

bb

cc

Oracle按指定字符拆分字符串-split函数

create or replace type strArray as table of varchar2(4020)

--此方法只能使用英文半角逗号(,)

create or replace function f_split(instr IN VARCHAR2) return strArray

as

l_tablen BINARY_INTEGER;

l_tab    DBMS_UTILITY.uncl_array;

l_ret strArray:=strArray();

BEGIN

DBMS_UTILITY.comma_to_table(instr, l_tablen, l_tab);

FOR i IN 1 .. l_tablen LOOP

l_ret.EXTEND(1);

l_ret(i):=l_tab(i);

END LOOP;

return l_ret;

END;

select t.column_value as value from table(f_split('a,b,付')) t;

create or replace type strArray as table of varchar2(4020)

CREATE OR REPLACE FUNCTION f_split(p_str IN VARCHAR2, p_delimiter IN VARCHAR2)

  RETURN strArray IS

  TYPE ret_cur IS REF CURSOR;

  ret_cur1 ret_cur;

  g_str strarray:=strarray();

  l_sql varchar2(500):='';

BEGIN

  l_sql :='SELECT REGEXP_SUBSTR ('''||p_str||''',''[^'||p_delimiter||']+'',1,LEVEL) as valuesa

            FROM DUAL

            CONNECT BY REGEXP_SUBSTR ('''||p_str||''',''[^'||p_delimiter||']+'',1,LEVEL) IS NOT NULL';

OPEN ret_cur1 FOR l_sql ;

  FETCH ret_cur1 BULK COLLECT INTO g_str;

  CLOSE ret_cur1;

  RETURN g_str;

END f_split;

select * from table(f_split('abc$d$e$','$') );

如何在oracle中使用类似split函数分割字符串

(1)定义split_type类型:

CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000) /(2)定义split函数:

CREATE OR REPLACE FUNCTION split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN split_type IS j INT := 0; i INT := 1; len INT := 0; len1 INT := 0; str VARCHAR2 (4000); my_split split_type := split_type (); 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); my_split.EXTEND; my_split (my_split.COUNT) := str; IF i = len THEN EXIT; END IF; ELSE str := SUBSTR (p_str, i, j - i); i := j + len1; my_split.EXTEND; my_split (my_split.COUNT) := str; END IF; END LOOP; RETURN my_split; END split; /(3)存储过程中,使用类似

For T In ( select a,b,c,d from table (split('1,2,3,4',',')) ) Loop--注意下面的inserti语句,varchar类型的值需要补充引号上去Execute Immediate ' insert into tableName set fieldName = '||T.a ;Execute Immediate 'commit';

End Loop;

的查询语句,把分开的结果拼成sql语句并写入到表中。


分享标题:oracle如何切分函数,oracle切割
地址分享:http://cqcxhl.cn/article/hoghpo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP