Sar*_*ava 5 regex sql sap hana
我有像"11223311"这样的数据,我希望所有多次出现都被单次出现所取代,即上面应该变成'123'.我在SAP HANA工作.
但是通过使用以下逻辑,我从'11223311'得到'1231'.
SELECT REPLACE_REGEXPR('(.)\1+' IN '11223331' WITH '\1' OCCURRENCE ALL) FROM DUMMY;
Run Code Online (Sandbox Code Playgroud)
您的正则表达式仅替换多个连续出现的字符;这就是\1+匹配之后立即(.)执行的操作。
您可以使用向前查找来删除在该匹配之后的某个位置也出现的所有字符。请注意,这保留了最后一次出现的情况,而不是第一次出现的情况:
SELECT REPLACE_REGEXPR('(.)(?=.*\1)' IN '11223331' WITH '' OCCURRENCE ALL) FROM DUMMY
Run Code Online (Sandbox Code Playgroud)
这将返回:231
如果你想保留第一次出现,我认为仅使用一个正则表达式是不可能的(不过我可能是错的)。以同样的方式使用后视是行不通的,因为它需要可变长度,而 HANA 和大多数其他实现不支持这一点。通常建议使用 \K 作为替代方案,但类似的内容(.).*\K\1不适用于全部替换,因为 \K 之前的所有字符仍会在替换中被消耗。如果您可以在循环中运行相同的正则表达式,它可以工作,但为什么不首先使用非正则表达式循环(如用户定义的 HANA 函数)。