Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да форматирате числа в Oracle

В Oracle Database можете да форматирате числа по много начини.

Например, можете да форматирате число като валута със запетаи и десетични точки на правилното място. Можете да посочите водещи нули, можете да добавите дробна част – или да я премахнете, ако това е необходимо.

Тази статия съдържа примери за следното:

  • Форматирайте числата като валута
  • Добавете разделител запетая/хиляди
  • Включете десетични знаци
  • Премахнете всички десетични знаци
  • Добавете водещи нули към число

Обяснявам също как форматирането се влияе от NLS параметрите на вашата сесия.

Параметрите за инициализация на NLS определят кои знаци се използват за разделителя на групата, десетичния знак и символа за валута в текущата сесия. Можете да се възползвате от тези параметри, за да изведете форматиране, съобразено с локал.

Можете да използвате функции като TO_CHAR(number) и дори LPAD() за да конвертирате числа в низ и да ги форматирате точно както желаете в движение. Функции като CAST() може също да има ефект върху това как се форматира числото в зависимост от типа данни, към който се предава.

Бърз пример

Ето бърз пример за форматиране на число с помощта на TO_CHAR() функция:

SELECT 
    TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;

Резултат:

$12,345.00

fmL99G999D00 part е форматен модел, който определя как да се форматира изходът. Можете да промените модела на формата, за да отговаря на вашите изисквания.

Всеки знак във форматния модел е форматен елемент и има специално значение. Можете да добавяте или премахвате елементи за формат, както е необходимо.

Ето пълен списък с елементи на формат, които можете да използвате за вашия модел на формат, когато форматирате числа.

Въпреки че е вярно, че можете да предоставите низов литерал за различни елементи на формат (например знак за долар ($ ) за долари), това предполага, че валутата е деноминирана в тази твърдо кодирана стойност. Има много други възможни валути по целия свят, а елементите на формата са в състояние да връщат динамично символа на местната валута за сесията на потребителя.

Същото е и за разделителя на групата и десетичния знак. Различните локали използват различни конвенции. Използването на тези елементи за форматиране, които разбират локал, прави кода ви по-преносим.

Също така, TO_CHAR() функцията ви позволява да предавате вашите собствени NLS параметри в рамките на функцията. Това засяга само това извикване на функция, така че можете да променяте неща като валутни символи в движение, без да е необходимо да ги кодирате твърдо във вашия модел на формат или да актуализирате NLS параметрите за вашата сесия.

Следващите примери показват по-подробно как работи всеки елемент на формат.

Форматиране на числата като валута

Ето пример за форматиране на число като валута:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Резултат:

$12

В този случай използвах L елемент формат, за да посочите символа за местна валута. Символът на местната валута се определя от NLS_CURRENCY параметър.

Като алтернатива можете да използвате C или U форматни елементи, които връщат съответно символа за валута ISO и символа за двойна валута.

Вижте Как да форматирате числата като валута в Oracle за повече информация и примери.

Добавете разделител запетая/хиляди

Въпреки че винаги можете да използвате твърдо кодирана запетая за вашия разделител на хиляди/групи, това не взема предвид държавите, които използват точка за своя разделител на групи. Обратното очевидно е вярно. Освен това някои държави разделят хиляди групи с тънко пространство.

Можете да използвате G елемент формат, за да посочите разделител на група. Това динамично връща приложимия разделител на групи, както е посочено в NLS_NUMERIC_CHARACTERS параметър. Този параметър определя както разделителя на групата, така и десетичния знак.

Пример:

SELECT 
    TO_CHAR(12345, 'fm99G999')
FROM DUAL;

Резултат:

12,345

Ето още един пример с по-голямо число:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Резултат:

123,456,789

Вижте Как да форматирате число със запетая в Oracle за по-подробна дискусия.

Включете десетични знаци

Въпреки че е вярно, че можете да кодирате твърдо своя собствен основен знак (например точка) във вашия модел на формат, това няма да се погрижи за други локали, които използват различен знак.

Можете да използвате D форматен елемент, за да върне десетичния/основния знак, който е посочен в NLS_NUMERIC_CHARACTERS параметър за текущата сесия:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Резултат:

7.00

В този случай използвах две 0 форматни елементи след знака за основа. Този елемент на формат връща крайни нули, където е приложимо.

Използване на 9 ще потисне всички последващи нули в този случай:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Резултат:

7.

Ако обаче премахнем fm модификатор на формат, получаваме различен резултат:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Резултат:

 7.00

fm модификаторът на формат потиска всяко допълване, което е приложено към резултата. Като го премахнем, нашият резултат е подплатен. Той съдържа водещо пространство, защото тук би отишъл отрицателен знак, ако числото беше отрицателно. И също така съдържа крайни нули, защото посочихме две 9 форматни елементи.

Вижте 3 начина за форматиране на число до 2 десетични знака в Oracle за повече идеи как да форматирате числа с десетични знака.

Премахване на всички десетични знаци

Има няколко начина да форматирате число, така че да няма десетични знаци. Един очевиден начин е просто да премахнете десетичната част от нашия форматен низ:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Резултат:

7

Но можем да използваме и други функции, като ROUND() , TRUNC() и CAST() за постигане на същия или подобен ефект.

Вижте 4 начина за форматиране на число без десетични знаци в Oracle за примери.

Добавяне на водещи нули

Имаме няколко опции, когато става въпрос за добавяне на водещи нули към нашето число.

Отново се придържаме към TO_CHAR() функция, можем да използваме 0 формат елемент за връщане на начални и крайни нули.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Резултат:

007

Ако използвахме 9 форматен елемент, нямаше да имаме водещи нули:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Резултат:

7

Ако обаче премахнем fm формат модификатор, щяхме да получим интервал, където всяка водеща нула би била:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Резултат:

   7

Друг начин за форматиране на число с водещи нули е с LPAD() функция. Тази функция прилага лявото допълване към низ или число. Можете да зададете кой знак/и да използвате за подпълване и така, ако използвате нула, тогава тя ще бъде допълнена с нули.

Вижте 2 начина за форматиране на число с водещи нули в Oracle за пример.

Как да проверите параметрите на NLS

Параметрите NLS (Поддръжка на националния език) определят специфичното за локала поведение както на клиента, така и на сървъра. Това включва параметри, които определят кои знаци да се използват за разделителя на групата, десетичния знак, символите за валута и т.н.

Нека проверим текущата стойност на моите NLS параметри:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Резултат:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_LANGUAGE               ENGLISH                           
NLS_TERRITORY              AUSTRALIA                         
NLS_CURRENCY               $                                 
NLS_ISO_CURRENCY           AUSTRALIA                         
NLS_NUMERIC_CHARACTERS     .,                                
NLS_CALENDAR               GREGORIAN                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_DATE_LANGUAGE          ENGLISH                           
NLS_CHARACTERSET           AL32UTF8                          
NLS_SORT                   BINARY                            
NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
NLS_DUAL_CURRENCY          $                                 
NLS_NCHAR_CHARACTERSET     AL16UTF16                         
NLS_COMP                   BINARY                            
NLS_LENGTH_SEMANTICS       BYTE                              
NLS_NCHAR_CONV_EXCP        FALSE                            

Следните параметри определят елементите за форматиране за числа и валути:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Стойността по подразбиране на тези параметри се определя от NLS_TERRITORY параметър. Когато зададем стойността на NLS_TERRITORY параметър, това имплицитно задава стойността за различни други параметри (включително четирите споменати).

В моя случай моята територия е Австралия и така тези четири параметъра отразяват как обикновено се форматират числата в Австралия. Ако го променя, за да кажа Германия, тогава тези четири параметъра ще бъдат актуализирани, за да отразяват форматирането за Германия.

Можете обаче изрично да зададете всеки параметър поотделно. Това ви позволява да замените стойността, която е имплицитно зададена от NLS_TERRITORY параметър.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:SQL заявка, която връща редове само с числови стойности

  2. Изберете втората минимална стойност в Oracle

  3. SQLT и разделяне

  4. Как да добавите вертикални граници към вашата изходна мрежа SQL*Plus / SQLcl

  5. Как да върна RefCursor от функцията на Oracle?