sql - How to remove repeated commas and trim from each end using REGEXP_REPLACE? -
i need concatenate several fields together, may or may not null. potentially end string like: ',,c,,e,,' want show 'c,e'.
i can via combination of regexp_replace , trim:
with sd (select 'a,b,c' str dual union select 'a' str dual union select null str dual union select 'a,,,d' dual union select 'a,,,,e,f,,'from dual union select ',,,d,,f,g,,'from dual) select str, regexp_replace(str, '(,)+', '\1') new_str, trim(both ',' regexp_replace(str, '(,)+', '\1')) trimmed_new_str sd; str new_str trimmed_new_str ----------- ----------- --------------- a,b,c a,b,c a,b,c a,,,d a,d a,d a,,,,e,f,, a,e,f, a,e,f ,,,d,,f,g,, ,d,f,g, d,f,g but feel ought doable in single regexp_replace can't work out life of me how done!
is possible? if so, how?
query:
with sd (select 'a,b,c' str dual union select 'a' dual union select null dual union select 'a,,,d,' dual union select ',a,,,d' dual union select ',a,,,d,' dual union select ',,,a,,,d,,,' dual union select ',a,,,,,e,f,,' dual union select ',,d,,f,g,,' dual ) select str, regexp_replace(str, '^,+|,+$|,+(,\w)','\1') new_str sd; result:
str new_str ----------------------- a,b,c a,b,c (null) (null) a,,,d, a,d ,a,,,d a,d ,a,,,d, a,d ,,,a,,,d,,, a,d ,a,,,,,e,f,, a,e,f ,,d,,f,g,, d,f,g pattern:
^,+ matches commas @ beginning | or ,+$ matches commas @ end | or ,+(,\w) matches several commas followed single comma , word. replaces above first sub expression, comma , word.
Comments
Post a Comment