Разделитель тысяч Oracle - PullRequest
       2

Разделитель тысяч Oracle

0 голосов
/ 28 февраля 2019

Я могу использовать это, чтобы получить желаемый формат:

SELECT TO_CHAR(12345,'99G999') "Amount" FROM DUAL;
SELECT TO_CHAR(123456,'999G999') "Amount" FROM DUAL;
SELECT TO_CHAR(1234567,'9G999G999') "Amount" FROM DUAL; 

Есть ли способ, при котором вам не нужно проверять длину следующим образом?:

select case
when length(my_number) = 5 then TO_CHAR(my_number,'99G999')
when length(my_number) = 6 then TO_CHAR(my_number,'999G999')

1 Ответ

0 голосов
/ 28 февраля 2019

Использование 9 в модели (в отличие от 0) означает, что вы не получаете ведущих нулей, поэтому вы можете использовать одну и ту же модель для всех этих:

SELECT TO_CHAR(12345,'9G999G999') "Amount" FROM DUAL;

Amount    
----------
    12,345

SELECT TO_CHAR(123456,'9G999G999') "Amount" FROM DUAL;

Amount    
----------
   123,456

SELECT TO_CHAR(1234567,'9G999G999') "Amount" FROM DUAL; 

Amount    
----------
 1,234,567

Вы простовам нужно 9 с (и G с) для самого длинного значения, которое вы ожидаете обработать.

Если вам не нужны начальные пробелы - в том числе и те, которые присутствуют во всех из них в качестве заполнителядля потенциального знака минус для отрицательных значений - вы можете добавить модификатор модели формата FM 'fill mode' :

SELECT TO_CHAR(12345,'FM999G999G999G999') "Amount" FROM DUAL;

Amount          
----------------
12,345

SELECT TO_CHAR(123456,'FM999G999G999G999') "Amount" FROM DUAL;

Amount          
----------------
123,456

SELECT TO_CHAR(1234567,'FM999G999G999G999') "Amount" FROM DUAL; 

Amount          
----------------
1,234,567
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...