有人可以帮我写一个 Oracle REGEXP_REPLACE 语句来为这样的数字添加破折号......
5310009618390
5310-00-961-8390
我在想我需要 regexp_replace 但也许不需要,也许只是替换 witll 工作。两者都尝试过,但没有得到任何地方。
select replace(t.column, 5310009618390, '-') from table t
有人可以帮我写一个 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})', '\1-\2-\3-\4') from dual;
该表达式“记住”如上所述的组,然后在它们之间用破折号显示它们。
能够描述您想要做什么很重要,因为这将帮助您构建表达式。即,如果规则是对前 4 个字符(而不是数字)进行分组,那么表达式会有所不同,等等。
请注意,此示例适用于 REGEXP_REPLACE,这可能会很昂贵,具体取决于您将要操作的数据集的大小。如果规则很简单,则使用 SUBSTR() 将其切碎并连接各个部分可能会更快,按照 Melanie 的建议添加破折号(仅使用 || 进行连接而不是 +)。