在字符串中单次出现替换多次出现

时间:2017-02-13 08:51:42

标签: sql regex sap hana

我有像“11223311”这样的数据,我希望所有多次出现都被单次出现所取代,即上面应该变成'123'。我在SAP HANA工作。

但是通过使用以下逻辑,我得到了 '1231'来自'11223311'。

SELECT  REPLACE_REGEXPR('(.)\1+' IN '11223331' WITH '\1' OCCURRENCE ALL)  FROM DUMMY;

2 个答案:

答案 0 :(得分:3)

您的正则表达式仅替换多个连续出现的字符;这是匹配\1+之后的(.)正在做的事情。

您可以使用预测来删除在该匹配后也出现的所有字符。请注意,这会保留 last ,而不是第一个:

SELECT  REPLACE_REGEXPR('(.)(?=.*\1)' IN '11223331' WITH '' OCCURRENCE ALL)  FROM DUMMY

返回:231

如果你想保留第一个,我不会看到只有一个正则表达式的可能性(虽然我可能是错的)。以相同的方式使用后视不起作用,因为它需要是可变长度的,这在HANA和大多数其他实现中是不受支持的。经常推荐\ K作为替代方案,但(.).*\K\1之类的东西不能替换所有,因为\ K之前的所有字符仍然在替换中消耗。如果您可以在循环中运行相同的正则表达式,它可以工作但是为什么不首先使用非正则表达式循环(如用户定义的HANA函数)。

答案 1 :(得分:0)

请试试这个

SELECT  REPLACE_REGEXPR(concat(concat('[^','11223331'),']') IN '0123456789' WITH '' OCCURRENCE ALL)  
FROM    DUMMY;