Seohan
Seohan

Reputation: 65

comma Separated List

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' ?

Upvotes: 0

Views: 84

Answers (2)

Ponder Stibbons
Ponder Stibbons

Reputation: 14848

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.

Upvotes: 1

Lalit Kumar B
Lalit Kumar B

Reputation: 49062

You could use REPLACE function.

For example,

SQL> WITH DATA(str) AS(
  2  SELECT '1,0,1' FROM dual
  3  )
  4  SELECT str,
  5         REPLACE(REPLACE(str, '0', 'Zero'), '1', 'One') new_str
  6  FROM DATA;

STR   NEW_STR
----- ------------------------------------------------------------
1,0,1 One,Zero,One

SQL>

Upvotes: 1

Related Questions