2011-05-26 52 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