Oracle split函式拆分

2021-06-16 18:06:38 字數 3346 閱讀 9593

sql**

-- 建立需要劃分的字串

with t1 as(   

select

'one,two,three,four,five,six,seven,eight,nine,zero'

as source_string   

from dual),   

-- 統計字串中子串的個數,用 ',' 來劃分子串

t2 as(   

select regexp_count(source_string, '[^,]+') as source_substring_count   

from t1),   

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(   

select rownum as row_number   

from dual, t2   

connect

by rownum <= t2.source_substring_count),   

-- 根據每個索引值逐個擷取字串

t4 as(   

select t3.row_number as substring_index,   

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as

substring

from t1, t3)   

select substring_index, substring

from t4;  

-- 建立需要劃分的字串

with t1 as(

select 'one,two,three,four,five,six,seven,eight,nine,zero' as source_string

from dual),

-- 統計字串中子串的個數,用 ',' 來劃分子串

t2 as(

select regexp_count(source_string, '[^,]+') as source_substring_count

from t1),

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(

select rownum as row_number

from dual, t2

connect by rownum <= t2.source_substring_count),

-- 根據每個索引值逐個擷取字串

t4 as(

select t3.row_number as substring_index,

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as substring

from t1, t3)

select substring_index, substring from t4;

鑑於 regexp_count() 方法是 oracle 11g 才新加上的,之前的版本並沒有,這裡再用另一種方法來統計子串的個數:

sql**

-- 建立需要劃分的字串

with t1 as(   

select

'one,two,three,four,five,six,seven,eight,nine,zero'

as source_string   

from dual),   

-- 統計字串中子串的個數

-- 字串中','字元用''代替後,其減少的長度自然就是原串中','字元的個數

t2 as(   

select length(t1.source_string) - length(replace

(t1.source_string, ',', '')) + 1   

as source_substring_count   

from t1),   

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(   

select rownum as row_number   

from dual, t2   

connect

by rownum <= t2.source_substring_count),   

-- 根據每個索引值逐個擷取字串

t4 as(   

select t3.row_number as substring_index,   

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as

substring

from t1, t3)   

select substring_index, substring

from t4;  

-- 建立需要劃分的字串

with t1 as(

select 'one,two,three,four,five,six,seven,eight,nine,zero' as source_string

from dual),

-- 統計字串中子串的個數

-- 字串中','字元用''代替後,其減少的長度自然就是原串中','字元的個數

t2 as(

select length(t1.source_string) - length(replace(t1.source_string, ',', '')) + 1

as source_substring_count

from t1),

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(

select rownum as row_number

from dual, t2

connect by rownum <= t2.source_substring_count),

-- 根據每個索引值逐個擷取字串

t4 as(

select t3.row_number as substring_index,

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as substring

from t1, t3)

select substring_index, substring from t4;

執行結果:

oracle split 字元分割函式

oracle本身沒有字元分割函式,乙個字串分割後,要以乙個結果集的方式存放,所以需要配合table一起用,分割後的字串是乙個陣列,在oracle中,可以先按如下,建立乙個型別,該型別就是split裡要返回的型別,如下 create or replace type strsplit type as t...

SQL拆分函式

drop function dbo.split 刪除自定義函式 dbo.split 函式名 函式 dbo.split create function dbo.split c varchar 1000 split varchar 2 returns t table name varchar 100 a...

生成函式 拆分數計算

計算整數n的拆分數用的是生成函式的方法。首先來看一下生成函式所解決的問題 1 x x n 1 x x n 1 x x n 這個母函式可以這樣理解 轉化為經典的 不可區分球 放 可區分盒 中的問題 每乙個括號表示乙個盒內放的球的情況 在計算拆分數時需要用乙個ferrers影象性質 n拆分成m個數的和的...