looking for function Split string Oracle -


i looking function in oracle

for example

select xxx('orange,apple,banana,strawberry,blueberry,tomato', ',' 3) dual; 

then shows

orange,apple,banana, 

it counts ',' 3

and

select xxx('orange,apple,banana,strawberry,blueberry,tomato', ',' ,2,3) dual; 

shows

banana,strawberry,blueberry, 

i hope makes sense

than much

there isn't single built-in function quite that. close regular expressions. create own function identify starting , ending positions of segment want, based on commas:

create function foo(p_str varchar2, p_delimiter varchar2,   p_occurrences number, p_position number default 0) return varchar2   l_start pls_integer;   l_end pls_integer;   l_length pls_integer;   l_result varchar2(4000); begin   l_start := case when p_position = 0 1     else instr(p_str, p_delimiter, 1, p_position) + 1 end;   l_end := instr(p_str, p_delimiter, l_start, p_occurrences);   l_length := case when l_end = 0 length(p_str) - l_start + 1   else l_end - l_start end;    l_result := substr(p_str, l_start, l_length);    return l_result; end; / 

then, swapping around arguments example, when supply both (just allow default value position work this):

select foo('orange,apple,banana,strawberry,blueberry,tomato', ',', 1) dual;  orange  select foo('orange,apple,banana,strawberry,blueberry,tomato', ',', 3) dual;  orange,apple,banana  select foo('orange,apple,banana,strawberry,blueberry,tomato', ',', 3, 2) dual;  banana,strawberry,blueberry  select foo('orange,apple,banana,strawberry,blueberry,tomato', ',', 3, 5) dual;  tomato 

if ask more occurrences there returns many exist (i.e. 'tomato' in last call, despite asking 3 elements). if starting position higher number of commas returns original string, can modify return null if prefer.

you in plain sql direct substr , instr calls gets bit messy.

another approach tokenise original string (allowing null elements), pick tokens want keep, , stick them together:

select listagg(token, ',') within group (order position) result (   select level position,     regexp_substr('orange,apple,banana,strawberry,blueberry,tomato',       '(.*?)(,|$)', 1, level, null, 1) token   dual   connect level <     regexp_count('orange,apple,banana,strawberry,blueberry,tomato', '(.*?)(,|$)') ) position between 3 , 5;  banana,strawberry,blueberry 

Comments

Popular posts from this blog

What is happening when Matlab is starting a "parallel pool"? -

angular - DownloadURL return null in below code -

php - Cannot override Laravel Spark authentication with own implementation -