[英]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.