【问题标题】:Oracle REGEXP_REPLACE help adding dashes to a number stringOracle REGEXP_REPLACE 帮助将破折号添加到数字字符串
【发布时间】:2015-07-26 06:55:58
【问题描述】:

谁能帮我写一个 Oracle REGEXP_REPLACE 语句来为这样的数字添加破折号...

5310009618390
5310-00-961-8390

我想我需要 regexp_replace 但也许不需要,也许只是替换 witll 工作。两者都试过了,都没有成功。

select replace(t.column, 5310009618390, '-') from table t

【问题讨论】:

  • 您尝试过SUBSTRING吗? SELECT SUBSTRING(t.column,0,4) + '-' + SUBSTRING(t.column,4,2) + '-' 等
  • 不,我没有试过那个 Malanie。最终目标是更新数据库,我现在使用 select 只是为了测试。
  • Oracle 在 regexp_replace 上提供的第一个示例是电话号码问题,它非常非常接近提供的解决方案。 docs.oracle.com/cd/B28359_01/server.111/b28286/….
  • 感谢帕特里克,我确实在搜索中看到了该页面,但未能向下滚动足够远以查看示例。现在将看看它是否有助于我更好地理解 Gary 的解决方案。

标签: oracle replace regexp-replace


【解决方案1】:

首先,您需要能够描述您想要做什么,以了解如何构建表达式。例如,它似乎是:将第一个 4 个号码分组,然后是接下来的 2 个号码,然后是接下来的 3 个号码,然后是接下来的 4 个号码。如果这是准确的:

select regexp_replace('5310009618390', '(\d{4})(\d{2})(\d{3})(\d{4})', '\1-\2-\3-\4') from dual;

该表达式“记住”上述组,然后用短划线显示它们。

能够描述您想要做什么很重要,因为这将帮助您构建表达式。即,如果规则是将前 4 个字符(而不是数字)分组,则表达式会有所不同,等等。

请注意,此示例适用于 REGEXP_REPLACE,这可能会很昂贵,具体取决于您将要操作的数据集的大小。如果规则很简单,那么使用 SUBSTR() 将其切碎并连接各个部分可能会更快,按照 Melanie 的建议添加破折号(仅使用 || 进行连接而不是 +)。

【讨论】:

  • Gary 非常成功,非常感谢。抱歉,我没有说得那么清楚,但你说得对。我很感激。
  • 很高兴为您提供帮助,请确保您已经考虑了数字可能在数据中的所有形式,因为表达式取决于此。是整个字符串吗?嵌入字符串?总是一样的长度?字符串中可以出现多个数字吗?等
  • 是的,数字字符串的长度总是相同的。这真的只是一次性的事情,所以解决了问题,现在可以继续了。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2021-09-01
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多