Oracle REGEXP_REPLACE 帮助将破折号添加到数字字符串

Oracle REGEXP_REPLACE help adding dashes to a number string

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

5310009618390
5310-00-961-8390

我想我需要 regexp_replace 但也许不需要,也许只是替换 witll 工作。两者都试过了,但一无所获。

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

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

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

这个表达式 "remembers" 如上所述的组,然后用中间的破折号显示它们。

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

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