逗号分隔列表

时间:2015-07-13 07:55:21

标签: sql oracle

我的程序有参数,以逗号分隔值, 所以当我输入Parameter ='1,0,1'

我想回归'一,零,一'?

2 个答案:

答案 0 :(得分:1)

您可以使用 REPLACE 功能。

例如,

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>

答案 1 :(得分:1)

此查询将列表拆分为数字,将数字转换为单词并将其与函数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

输出:

COL
-------------------------------------------
seven, zero, eleven, one hundred thirty-two

此解决方案的限制是值范围介于0和5373484之间(因为5373484是函数to_date的最大值)。 如果您需要更高的值,可以在this article中找到提示。