使用sql替换2个字符之间的所有子字符串

时间:2018-03-19 13:25:43

标签: sql amazon-redshift

输入字符串:["1189-13627273","89-13706681","118-13708388"]

预期输出:["14013627273","14013706681","14013708388"]

我想要实现的是取代任何数字直到' - '对于每个带有硬编码文本的项目,例如' 140'

4 个答案:

答案 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) 以及在这种情况下的输出是什么非常重要