I have procedure that has parameter that takes comma separated value , so when I enter Parameter = \'1,0,1\'
I want to return \' one , Zero , One\' ?
This query splits list into into numbers, converts numbers into words and joins them again together with function listagg
:
with t1 as (select '7, 0, 11, 132' col from dual),
t2 as (select level lvl,to_number(regexp_substr(col,'[^,]+', 1, level)) col
from t1 connect by regexp_substr(col, '[^,]+', 1, level) is not null)
select listagg(case
when col=0 then 'zero'
else to_char(to_date(col,'j'), 'jsp')
end,
', ') within group (order by lvl) col
from t2
Output:
COL
-------------------------------------------
seven, zero, eleven, one hundred thirty-two
The limitation of this solution is that values range is between 0 and 5373484 (because 5373484 is maximum value for function to_date
).
If you need higher values you can find hints in this article.