暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用破折号格式化字符串

askTom 2017-11-07
512

问题描述

我正在从存储过程中查询字段,我想在存储过程中将其格式化为社会安全号码。

如何在Oracle中像xxx-xx-xxxx一样格式化xxxxxxxxx?

我知道我能做到:

从对偶中选择TO_CHAR(012345678,'000g00g0000 ','nls_numeric_characters =.-') ssn;

或者

SUBSTR(data,1,3) | | '-' | | SUBSTR(data,4,2) | | '-' | | SUBSTR(data,6,4);

But my biggest concern is that the field may have many ssn separate by commas. F或者example :

1) 012345678
2) 012345678,876543210
3) 123456789、987654321、234567890
4)...

专家解答

有各种方法可以做到这一点。例如,您可以将逗号分隔的数字分成几行。然后你可以应用上面的技术。

但是,如果您想将所有内容保留在同一行中,则可以使用正则表达式。将括号包装在表达式周围以找到N个字符。然后在用连字符分隔的替换中使用反向引用。例如:

with rws as (
  select '123456789,987654321,234567890' str from dual union all
  select '012345678,876543210' str from dual
)
  select regexp_replace(str, '([0-9]{3})([0-9]{2})([0-9]{4})', '\1-\2-\3') fmt
  from   rws;

FMT                                   
123-45-6789,987-65-4321,234-56-7890   
012-34-5678,876-54-3210
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论