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

时间:2015-05-14 15:20:55

标签: oracle replace regexp-replace

有人可以帮我写一个Oracle REGEXP_REPLACE语句,将破折号添加到这样的数字中......

5310009618390
5310-00-961-8390

我认为我需要regexp_replace但可能没有,也许只是替换工作。尝试过两者并没有得到任何地方。

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

1 个答案:

答案 0 :(得分:2)

首先,您需要能够描述您想要了解如何构建表达式的内容。例如,它似乎是:将前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建议的那样(仅使用||进行连接而不是+)。