如何将数字格式化为 xxx-xx-xxxx?

发布于 2024-07-24 23:31:44 字数 99 浏览 8 评论 0原文

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

如何在 Oracle 中将 xxxxxxxxx 格式化为 xxx-xx-xxxx?

I am querying social security number data from a stored procedure and I would like to format it as a social security number in my stored procedure.

How can I format xxxxxxxxx like xxx-xx-xxxx in Oracle?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

耀眼的星火 2024-07-31 23:31:44

使用 TO_CHAR 进行 SSN 格式化

SELECT TO_CHAR(012345678, '000g00g0000','nls_numeric_characters=.-') ssn from dual;

SSN
-----------
012-34-5678  

更新:感谢 Gary 指出应使用“0”格式字符而不是“9”来保留前导零。

SSN formatting with TO_CHAR

SELECT TO_CHAR(012345678, '000g00g0000','nls_numeric_characters=.-') ssn from dual;

SSN
-----------
012-34-5678  

update: thanks to Gary for pointing out that the '0' format character should be used rather than the '9' to preserve leading zeroes.

醉生梦死 2024-07-31 23:31:44

您还可以使用 concat 运算符 ||,这可能更具可读性。

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

you could also use the concat operator ||, which might be more readable.

 SUBSTR(data, 1, 3) ||'-'||SUBSTR(data, 4, 2)||'-'||SUBSTR(data, 6, 4)
夜未央樱花落 2024-07-31 23:31:44

如果您想在应用格式之前检查该数字是否由 9 位数字组成,那么正则表达式可能会有所帮助:

SQL> create table t (nr)
  2  as
  3  select 123456789 from dual union all
  4  select 987654321 from dual union all
  5  select null from dual union all
  6  select 1234567 from dual union all
  7  select 12345678901234 from dual
  8  /

Tabel is aangemaakt.

SQL> select nr
  2       , regexp_replace(nr,'(^[[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{4}$)','\1-\2-\3') formatted_nr
  3    from t
  4  /

                                    NR FORMATTED_NR
-------------------------------------- --------------------
                             123456789 123-45-6789
                             987654321 987-65-4321

                               1234567 1234567
                        12345678901234 12345678901234

5 rijen zijn geselecteerd.

问候,
抢。

And if you'd like to check if the number consists of 9 digits before applying the format, then regular expressions can be of help:

SQL> create table t (nr)
  2  as
  3  select 123456789 from dual union all
  4  select 987654321 from dual union all
  5  select null from dual union all
  6  select 1234567 from dual union all
  7  select 12345678901234 from dual
  8  /

Tabel is aangemaakt.

SQL> select nr
  2       , regexp_replace(nr,'(^[[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{4}$)','\1-\2-\3') formatted_nr
  3    from t
  4  /

                                    NR FORMATTED_NR
-------------------------------------- --------------------
                             123456789 123-45-6789
                             987654321 987-65-4321

                               1234567 1234567
                        12345678901234 12345678901234

5 rijen zijn geselecteerd.

Regards,
Rob.

江湖彼岸 2024-07-31 23:31:44
CONCAT(CONCAT(CONCAT(CONCAT(SUBSTR(sspdata, 1, 3), '-'), SUBSTR(sspdata, 4, 2)), '-',) SUBSTR(sspdata, 6, 4))
CONCAT(CONCAT(CONCAT(CONCAT(SUBSTR(sspdata, 1, 3), '-'), SUBSTR(sspdata, 4, 2)), '-',) SUBSTR(sspdata, 6, 4))
隐诗 2024-07-31 23:31:44

我只是晚了 11 年,但几个月前我就提出了这个问题,并且刚刚想出了我的新首选方法:

replace(to_char(my_number, 'FM000,00,0000'), ',', '-')

FM 修剪前导空格,replace()< /code> 将这些逗号变成破折号。 需要注意的是:这仅适用于数字(这在我们的用例中很好)。

它比 substr() 更优雅,比 nls_numeric_characters 方法更紧凑(在我​​看来更容易记住)。

也就是说,我认为此方法的效率低于 nls_numeric_characters 方法。

I'm only 11 years late, but I came to this question a few months ago and just figured out my new preferred method:

replace(to_char(my_number, 'FM000,00,0000'), ',', '-')

The FM trims the leading space, and the replace() turns those commas into dashes. One caveat: This only works for numbers (which is fine in our use-cases).

It's more elegant than substr() and more compact (and easier to remember, in my opinion) than nls_numeric_characters method.

That said, I assume this method is less efficient than the nls_numeric_characters method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文