2015-07-13 194 views
0

我有了參數,它採用逗號分隔值過程中, 所以當我輸入參數=「1,0,1」逗號分隔的列表

我想回到「一個,零個,一個」?

+1

看了你的變量初始化。看來你正在使用'SQL Server' – Ravi

+0

我同意jWeaver:'@pParameter ='1,0,1''在PL/SQL中無效傳遞一個參數。如果你傳遞的是這樣的參數,那麼你不是**,而是使用Oracle。 –

回答

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

這個查詢拆分列表進入到數字,將數字轉換成文字,並再次與功能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找到提示。