有人可以帮我写一个Oracle REGEXP_REPLACE语句,将破折号添加到这样的数字中......
5310009618390
5310-00-961-8390
我认为我需要regexp_replace但可能没有,也许只是替换工作。尝试过两者并没有得到任何地方。
select replace(t.column, 5310009618390, '-') from table t
答案 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建议的那样(仅使用||进行连接而不是+)。