繁体   English   中英

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

[英]Replacing multiple occurrence by single occurrence in string

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

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

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

您的正则表达式仅替换多个连续出现的字符; 这就是匹配(.)之后直接发生的\\1+

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

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

返回: 231

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

请试试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM