Как я могу отформатировать число как xxx-xx-xxxx? - PullRequest
8 голосов
/ 25 июня 2009

Я запрашиваю данные номера социального страхования из хранимой процедуры и хочу отформатировать их как номер социального страхования в моей хранимой процедуре.

Как мне отформатировать xxxxxxxxx, как xxx-xx-xxxx в Oracle?

Ответы [ 4 ]

18 голосов
/ 25 июня 2009

Форматирование SSN с TO_CHAR

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

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

обновление: спасибо Гэри за то, что он указал, что для сохранения начальных нулей следует использовать символ формата «0», а не «9».

11 голосов
/ 25 июня 2009

вы также можете использовать оператор concat ||, который может быть более читабельным.

 SUBSTR(data, 1, 3) ||'-'||SUBSTR(data, 4, 2)||'-'||SUBSTR(data, 6, 4)
6 голосов
/ 25 июня 2009

И если вы хотите проверить, состоит ли число из 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.

С уважением, Роб.

0 голосов
/ 25 июня 2009
CONCAT(CONCAT(CONCAT(CONCAT(SUBSTR(sspdata, 1, 3), '-'), SUBSTR(sspdata, 4, 2)), '-',) SUBSTR(sspdata, 6, 4))
...