Как я могу отформатировать число как xxx-xx-xxxx?
Я запрашиваю данные номера социального страхования из хранимой процедуры и хочу отформатировать их как номер социального страхования в моей хранимой процедуре.
Как я могу отформатировать xxxxxxxxx как xxx-xx-xxxx в Oracle?
4 ответа
SSN форматирование с TO_CHAR
SELECT TO_CHAR(012345678, '000g00g0000','nls_numeric_characters=.-') ssn from dual;
SSN
-----------
012-34-5678
обновление: спасибо Гэри за то, что он указал, что символ формата "0" должен использоваться вместо "9" для сохранения лидирующих нулей.
Вы также можете использовать оператор concat ||
, который может быть более читабельным.
SUBSTR(data, 1, 3) ||'-'||SUBSTR(data, 4, 2)||'-'||SUBSTR(data, 6, 4)
И если вы хотите проверить, состоит ли число из 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.
С уважением, Роб.
CONCAT(CONCAT(CONCAT(CONCAT(SUBSTR(sspdata, 1, 3), '-'), SUBSTR(sspdata, 4, 2)), '-',) SUBSTR(sspdata, 6, 4))
Я опоздал всего на 11 лет, но я подошел к этому вопросу несколько месяцев назад и только что выяснил свой новый предпочтительный метод:
replace(to_char(my_number, 'FM000,00,0000'), ',', '-')
В FM
обрезает ведущее пространство, а replace()
превращает запятые в тире. Одно предостережение: это работает только для чисел (что нормально в наших случаях использования).
Это элегантнее, чем substr()
и более компактный (и, на мой взгляд, легче запоминающийся), чем nls_numeric_characters
метод.
Тем не менее, я предполагаю, что этот метод менее эффективен, чем nls_numeric_characters
метод.