输入字符串:["1189-13627273","89-13706681","118-13708388"]
预期输出:["14013627273","14013706681","14013708388"]
我想要实现的是取代任何数字直到' - '对于每个带有硬编码文本的项目,例如' 140'
答案 0 :(得分:0)
使用regexp_replace(text,text,text)
函数执行此操作,使模式匹配并替换字符串。
第一个参数是要替换的值,第二个是POSIX正则表达式,第三个是替换文本。
示例强>
SELECT regexp_replace('1189-13627273', '.*-', '140');
输出:14013627273
示例数据集查询
SELECT regexp_replace(value_to_replace, '.*-', '140')
FROM (
VALUES ('1189-13627273'), ('89-13706681'), ('118-13708388')
) t(value_to_replace);
注意!模式.*-
将替换每个字符,直到找到-
的最后一次出现140
。
答案 1 :(得分:0)
SELECT replace(value_to_replace, '-', '140')
FROM (
VALUES ('1189-13627273-77'), ('89-13706681'), ('118-13708388')
) t(value_to_replace);
检查这个
答案 2 :(得分:0)
我找到了使用下面正则表达式实现这一目标的正确方法。
SELECT REGEXP_REPLACE (string_to_change, '\\"[0-9]+\\-', '140')
答案 3 :(得分:0)
你不需要正则表达式,它就像140
和来自-
的子串的连接一样简单(或者当你用{{分割时的第二部分) 1}})
-
另外,考虑一下你的实例是否包含select '140'||substring('89-13706681' from position('-' in '89-13706681')+1 for 1000)
select '140'||split_part('89-13706681','-',2)
以及在这种情况下的输出是什么非常重要