用split_part函数替换字符串

时间:2011-05-26 02:55:31

标签: postgresql

我想要在分隔符'''之前替换第一个单词'0,第一个单词')

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

错误:函数replace(unknown,boolean,unknown)不存在 第1行:选择替换('标签,图表,地图',split_part('标签,图表',',',...                ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

2 个答案:

答案 0 :(得分:2)

replace函数替换了所有出现的字符串,因此您必须确保要替换的字符串是唯一的或使用其他内容。但是,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

答案 1 :(得分:-1)

你需要强制转换,因为函数需要替换(文本,文本,文本),并且不知道如何处理你的文字字符串,将它们称为未知......

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

第二个参数也是LIKE比较?返回boolean,但函数replace期望它是分隔符。

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

最后是最后一个参数(与第一个相同的问题)

cast('0, tab' AS text)

当然,如果你真的只想在你的字符串,'标签,图表,地图'前面添加'0',你可以这样做......

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