sql >> Databáze >  >> RDS >> Oracle

Jak formátovat čísla v Oracle

V databázi Oracle můžete formátovat čísla mnoha způsoby.

Můžete například naformátovat číslo jako měnu s čárkami a desetinnými čárkami na správném místě. Můžete zadat úvodní nuly, přidat zlomkovou část – nebo ji odstranit, pokud je to nutné.

Tento článek obsahuje následující příklady:

  • Formátovat čísla jako měnu
  • Přidejte čárku/oddělovač tisíců
  • Uveďte desetinná místa
  • Odeberte všechna desetinná místa
  • Přidejte k číslu úvodní nuly

Vysvětlím také, jak je formátování ovlivněno parametry NLS vaší relace.

Inicializační parametry NLS určují, které znaky se použijí pro oddělovač skupiny, desetinný znak a symbol měny v aktuální relaci. Tyto parametry můžete využít k výstupu formátování podle národního prostředí.

Můžete použít funkce jako TO_CHAR(number) a dokonce LPAD() převést čísla na řetězec a formátovat je přesně tak, jak chcete, za běhu. Funkce jako CAST() může mít také vliv na to, jak je číslo formátováno, v závislosti na datovém typu, do kterého je přetypováno.

Rychlý příklad

Zde je rychlý příklad formátování čísla pomocí TO_CHAR() funkce:

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

Výsledek:

$12,345.00

fmL99G999D00 část je model formátu, který určuje, jak má být výstup formátován. Model formátu můžete změnit tak, aby vyhovoval vašim požadavkům.

Každý znak v modelu formátu je prvkem formátu a má zvláštní význam. Podle potřeby můžete přidat nebo odebrat prvky formátu.

Zde je úplný seznam prvků formátu, které můžete použít pro svůj model formátu při formátování čísel.

I když je pravda, že můžete zadat řetězcový literál pro různé formátové prvky (například znak dolaru ($ ) pro dolary), předpokládá se, že měna je denominována v této pevně zakódované hodnotě. Na světě existuje mnoho dalších možných měn a prvky formátu jsou schopny dynamicky vracet symbol místní měny pro relaci uživatele.

Je to stejné pro oddělovač skupiny a desetinný znak. Různá národní prostředí používají různé konvence. Pomocí těchto prvků formátu s vědomím národního prostředí je váš kód přenosnější.

Také TO_CHAR() Funkce umožňuje předat v rámci funkce vlastní parametry NLS. Pokud tak učiníte, ovlivní to pouze volání funkce, takže věci, jako jsou symboly měn, můžete měnit za chodu, aniž byste je museli napevno kódovat do modelu formátu nebo aktualizovat parametry NLS pro vaši relaci.

Následující příklady podrobněji ukazují, jak jednotlivé prvky formátu fungují.

Formátovat čísla jako měnu

Zde je příklad formátování čísla jako měny:

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

Výsledek:

$12

V tomto případě jsem použil L formátovací prvek pro určení symbolu místní měny. Symbol místní měny je určen NLS_CURRENCY parametr.

Alternativně můžete použít C nebo U formátovací prvky, které vracejí symbol měny ISO a symbol duální měny.

Další informace a příklady naleznete v části Jak formátovat čísla jako měnu v Oracle.

Přidejte oddělovač čárka/tisíce

I když můžete vždy použít pevně zakódovanou čárku pro oddělovač tisíců/skupin, nebere to v úvahu země, které pro oddělovač skupin používají tečku. Opak je zjevně pravdou. Některé země také oddělují tisíce skupin tenkou mezerou.

Můžete použít G format element k určení oddělovače skupiny. To dynamicky vrátí příslušný oddělovač skupin, jak je uvedeno v NLS_NUMERIC_CHARACTERS parametr. Tento parametr určuje jak oddělovač skupiny, tak desetinný znak.

Příklad:

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

Výsledek:

12,345

Zde je další příklad s větším číslem:

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

Výsledek:

123,456,789

Podrobnější diskusi naleznete v části Jak formátovat číslo pomocí čárky v Oracle.

Zahrnout desetinná místa

I když je pravda, že do svého formátovacího modelu můžete napevno zakódovat svůj vlastní radixový znak (například tečku), nebude to vyhovovat jiným lokalitám, které používají jiný znak.

Můžete použít D formátovací prvek pro vrácení desetinného/radixového znaku, který je uveden v NLS_NUMERIC_CHARACTERS parametr pro aktuální relaci:

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

Výsledek:

7.00

V tomto případě jsem použil dvě 0 formátování prvků za znakem radix. Tento prvek formátu tam, kde je to možné, vrací koncové nuly.

Pomocí 9 by v tomto případě potlačil všechny koncové nuly:

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

Výsledek:

7.

Pokud však odstraníme fm modifikátor formátu, dostaneme jiný výsledek:

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

Výsledek:

 7.00

fm Modifikátor formátu potlačí veškeré výplně, které byly použity na výsledek. Jeho odstraněním je náš výsledek vycpaný. Obsahuje úvodní mezeru, protože to je místo, kde by se záporné znaménko přesunulo, pokud by číslo bylo záporné. A také obsahuje koncové nuly, protože jsme zadali dvě 9 prvky formátu.

Další nápady, jak formátovat čísla s desetinnými místy, najdete v části 3 způsoby formátování čísla na 2 desetinná místa v Oracle.

Odebrat všechna desetinná místa

Existuje několik způsobů, jak formátovat číslo tak, aby nemělo žádná desetinná místa. Jedním zřejmým způsobem je jednoduše odstranit desetinnou část z našeho formátovacího řetězce:

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

Výsledek:

7

Můžeme ale použít i další funkce, jako je ROUND() , TRUNC() a CAST() k dosažení stejného nebo podobného efektu.

Příklady viz 4 způsoby formátování čísla bez desetinných míst v Oracle.

Přidat úvodní nuly

Pokud jde o přidání úvodních nul k našemu číslu, máme několik možností.

Opět zůstaňme u TO_CHAR() funkce, můžeme použít 0 formátovací prvek pro vrácení úvodní a koncové nuly.

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

Výsledek:

007

Pokud bychom použili 9 format element, neměli bychom žádné úvodní nuly:

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

Výsledek:

7

Pokud však odstraníme fm modifikátor formátu, dostali bychom mezeru, kde by jakákoli úvodní nula byla:

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

Výsledek:

   7

Dalším způsobem formátování čísla s úvodními nulami je LPAD() funkce. Tato funkce aplikuje levou výplň na řetězec nebo číslo. Můžete určit, které znaky se mají použít pro výplň, takže pokud použijete nulu, bude doplněna nulami.

Příklad viz 2 způsoby formátování čísla s úvodními nulami v Oracle.

Jak zkontrolovat parametry NLS

Parametry NLS (National Language Support) určují chování specifické pro národní prostředí na klientovi i na serveru. To zahrnuje parametry, které určují, které znaky se mají použít pro oddělovač skupiny, desetinný znak, symboly měny atd.

Pojďme zkontrolovat aktuální hodnotu mých parametrů NLS:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Výsledek:

                 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                            

Následující parametry určují prvky formátování čísel a měn:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Výchozí hodnota těchto parametrů je určena NLS_TERRITORY parametr. Když nastavíme hodnotu NLS_TERRITORY Tento parametr implicitně nastavuje hodnotu pro různé další parametry (včetně čtyř zmíněných).

V mém případě je mým územím Austrálie, a proto tyto čtyři parametry odrážejí, jak jsou čísla obvykle formátována v Austrálii. Pokud bych to změnil na Německo, pak by se tyto čtyři parametry aktualizovaly, aby odrážely formátování pro Německo.

Každý parametr však můžete explicitně nastavit samostatně. To vám umožní přepsat hodnotu, která byla implicitně nastavena pomocí NLS_TERRITORY parametr.


  1. lastInsertId nefunguje v Postgresql

  2. Neplatný název běžného uživatele nebo role

  3. Jak vložit datovou tabulku do databázové tabulky SQL Serveru?

  4. Rozdíly mezi INDEX, PRIMARY, UNIQUE, FULLTEXT v MySQL?