2011-05-26 51 views
0

我想用'0,第一個單詞'替換第一個單詞''','x,第一個單詞')用split_part函數替換字符串

select replace('tab,graph,map', split_part('tab,graph', ',', 1) like 'tab','0, tab') 

錯誤:函數替換(未知,布爾,未知)不存在 第1行:選擇替換( 'tab,graph,map',split_part('tab,graph',',',... ^ 提示:沒有函數匹配給定的名稱和參數類型。您可能需要添加顯式類型轉換.

回答

-1

您需要強制轉換,因爲函數需要替換(文本,文本,文本)並且不知道如何處理您的字面字符串調用t下襬未知...

cast('tab,graph,map' AS text) 

第二個參數是一個喜歡的比較嗎?它返回布爾值,但函數replace期望它是分隔符。

CAST(split_part('tab,graph', ',', 1) AS text) 

終於最後一個參數(同樣的問題,因爲第一)

cast('0, tab' AS text) 

當然如果你真的只是想在前面加上「0」,你的字符串「選項卡,圖形,地圖」你可能只是做...

SELECT '0, ' || 'tab,graph,map' ; 
+0

這不僅是要預先'0',但單詞選項卡不僅在第一個單詞例如:選項卡,地圖,tab.graph ...我想在替代之前的第一個單詞中替換選項卡與'0 ,' – Nike 2011-05-26 03:39:00

+0

我已經完成了你的suges但它不起作用 – Nike 2011-05-26 03:40:09

2

replace函數替換字符串的所有出現,所以你必須確保字符串至r eplace是獨一無二的或者使用別的東西。但regexp_replace只會替換默認情況下的第一個匹配項,因此您可以使用它;你的問題是有點不清楚什麼期望的輸出,但也許這是被你在找什麼:

=> select regexp_replace('tab,graph,map', ',', '0,'); 
regexp_replace 
---------------- 
tab0,graph,map 

或者這一個:

=> select regexp_replace('tab,graph,map', 'tab,', '0,'); 
regexp_replace 
---------------- 
0,graph,map 

或甚至是這樣的:

=> select regexp_replace('tab,graph,map', 'tab,', '0,,'); 
regexp_replace 
---------------- 
0,,graph,map