sql - 用字符串中的单个出现替换多次出现

标签 sql regex sap hana

我有像“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 函数)。

关于sql - 用字符串中的单个出现替换多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199974/

相关文章:

Azure Databricks 单元执行停留在等待运行状态

mysql - 如何通过左连接合并2个表中的数据,形成聚合而不重复记录

sql - Postgres 9.4 外部数据包装器 "FDW"无法在不同端的插入之间发送串行数据类型

Javascript 忽略字符串中的 NaN 字符

javascript - 为什么反转全局正则表达式总是在 JavaScript 中返回 true

C# 字符串拆分 - 无结束分隔符

c# - 对话框不适用于 SAP Business One 附加组件

excel - 不同 PC 之间的 SAP 脚本记录不同

mysql - 将查询结果插入表并打印时间戳

c# - TransactionScope 最大超时