Oracle中的Split函數

來源:互聯網
上載者:User
首先需要定義 2 個類型1. Row 類型CREATE

OR

REPLACE
TYPE ty_row_str_split  
as
object (strValue
VARCHAR2
(
4000
))

2. Table 類型

CREATE

OR

REPLACE
TYPE ty_tbl_str_split
IS

TABLE

OF
ty_row_str_split

建立函數: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    :
=

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);
       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;

使用範例:select
to_number(strvalue)
as
Value
from

table
(fn_split(
'
1,2,3
'
,
'
,
'
))

select
to_char(strvalue)
as
Value
from

table
(fn_split(
'
aa,bb,cc
'
,
'
,
'
))

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.