用字符串中的一次出现替换多次出现

Replacing multiple occurrence by single occurrence in string

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

但是通过使用下面的逻辑我得到 来自“11223311”的“1231”。

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

请试试这个

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

您的正则表达式仅替换多个 连续 个字符;这就是 + 在匹配 (.) 之后的直接作用。

您可以使用 look-ahead 删除在该匹配项之后某处也出现的所有字符。请注意,这会保留 last 出现,而​​不是第一个:

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

这个returns:231

如果您想保留 第一次 出现,我认为仅使用一个正则表达式是不可能的(尽管我可能是错的)。以相同的方式使用 look-behind 不起作用,因为它需要 variable-length,这在 HANA 和大多数其他实现中不受支持。通常建议将 \K 作为替代,但像 (.).*\K 这样的东西不能与全部替换一起使用,因为 \K 之前的所有字符仍然在替换中消耗。如果你可以在循环中 运行 相同的正则表达式,它可以工作,但为什么不首先使用 non-regex 循环(如 user-defined HANA 函数)。