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

8 oracle string-formatting to-char

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

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

Mar*_*son 18

使用TO_CHAR进行SSN格式化

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

SSN
-----------
012-34-5678  
Run Code Online (Sandbox Code Playgroud)

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

  • +1,Oracle SQL程序员应该熟悉Oracle提供的格式化工具. (4认同)

akf*_*akf 11

你也可以使用concat运算符||,它可能更具可读性.

 SUBSTR(data, 1, 3) ||'-'||SUBSTR(data, 4, 2)||'-'||SUBSTR(data, 6, 4)
Run Code Online (Sandbox Code Playgroud)


Rob*_*ijk 6

如果您想在应用格式之前检查数字是否包含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.
Run Code Online (Sandbox Code Playgroud)

问候,Rob.


Rop*_*tah 0

CONCAT(CONCAT(CONCAT(CONCAT(SUBSTR(sspdata, 1, 3), '-'), SUBSTR(sspdata, 4, 2)), '-',) SUBSTR(sspdata, 6, 4))
Run Code Online (Sandbox Code Playgroud)

  • 这就是我为什么讨厌用大多数 SQL 方言格式化内容的原因了。令人发指! (2认同)