【问题标题】:replace string with split_part function用 split_part 函数替换字符串
【发布时间】:2011-05-26 02:55:31
【问题描述】:

我想将分隔符','之前的第一个单词替换为'0,第一个单词')

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

错误:函数替换(未知,布尔,未知)不存在 第 1 行:选择替换('tab,graph,map', split_part('tab,graph', ',',... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      cast('0, tab' AS text)
      

      当然,如果你真的只是想在你的字符串 'tab,graph,map' 前面加上 '0,' 你可以这样做...

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

      【讨论】:

      • 这不仅是在前面加上'0,',而且单词 tab 不仅在第一个单词中 ex : tab,map,tab.graph... 我想替换第一个单词中的 tab在分隔符之前带有“0”,
      最近更新 更多