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

TO_CHAR(číslo) Funkce v Oracle

V databázi Oracle TO_CHAR(number) funkce převede číslo na VARCHAR2 hodnotu ve formátu určeném argumentem format.

Syntaxe

Syntaxe vypadá takto:

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

Kde:

  • n může být typu NUMBER , BINARY_FLOAT nebo BINARY_DOUBLE .
  • fmt je volitelný model formátu, který určuje, jak má být výsledek formátován. Podívejte se na platné prvky formátu čísel, které lze použít k vytvoření modelu formátu.
  • 'nlsparam' je volitelný argument, který určuje, jak jsou vráceny různé znaky. Můžete jej použít k zadání desetinného znaku a oddělovače skupiny, symbolu místní měny a mezinárodního symbolu měny. Pokud je tento argument vynechán, použijí se výchozí hodnoty pro aktuální relaci.

Příklad

Zde je příklad demonstrující, jak funkce funguje:

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Výsledek:

    RESULT 
__________ 
 12,345   

První argument je skutečné číslo, které formátujeme, a druhý argument je model formátu. Model formátu určuje, jak je číslo formátováno.

V tomto případě náš formátový model naformátuje číslo s oddělovačem skupiny na příslušné pozici. Každá číslice je reprezentována 9 a oddělovač skupin je reprezentován G .

Pokud mírně změníme model formátu, stane se toto:

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Výsledek:

     RESULT 
___________ 
 012,345    

V tomto případě jsme začali model formátu s 0 charakter. To vrátí úvodní nulu, kdykoli je to možné. 9 znak nevrací úvodní nuly.

Ve skutečnosti bychom mohli nahradit všech 9 s 0 s pokud chceme. Zde je srovnání, které ukazuje, jak se výsledky mohou značně lišit v závislosti na tom, který prvek formátu používáte:

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Výsledek:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Symboly měn

Můžete použít L formátovací prvek pro vrácení symbolu místní měny.

Příklad:

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Výsledek:

                 RESULT 
_______________________ 
          $12,345.00   

Tento příklad používá model formátu, jehož výstupem je výsledek pomocí symbolu místní měny (reprezentovaného L ), oddělovač skupiny (reprezentovaný G ), desetinný znak (reprezentovaný D ) a samozřejmě každá číslice (reprezentovaná 9 ).

Symbol místní měny je určen aktuální hodnotou NLS_CURRENCY parametr. Je pravda, že jsme mohli použít znak dolaru ($ ) pro symbol měny, ale to předpokládá, že měna je denominována v dolarech. Ve světě existuje mnoho dalších možných měn a L format element je schopen dynamicky vracet symbol místní měny pro relaci uživatele.

Pokud je potřebujete zkontrolovat, viz Jak zkontrolovat hodnoty parametrů NLS.

Seznam prvků formátu, které lze použít k formátování čísel pomocí této funkce, naleznete v tomto Úplném seznamu prvků formátu čísel v Oracle.

Výchozí formát

Pokud vynecháte fmt argument, je číslo převedeno na VARCHAR2 hodnotu přesně tak dlouho, aby udržel její platné číslice.

Zde je příklad převodu čísla bez určení formátu:

SELECT TO_CHAR(525.45)
FROM DUAL;

Výsledek:

525.45

'nlsparam' Argument

 'nlsparam' argument lze použít k určení desetinného znaku a oddělovače skupiny, symbolu místní měny a mezinárodního symbolu měny.

Má následující podobu:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Příklad:

SELECT 
    TO_CHAR(
        1234.56, 
        'L99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Výsledek:

         €1.234,56

Je to tu znovu, ale tentokrát nahrazuji L s C ve formátu modelu:

SELECT 
    TO_CHAR(
        1234.56, 
        'C99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Výsledek:

         €1.234,56

C vrátí symbol měny ISO, což je v tomto případě EUR .

Jak potlačit výplň

Možná jste si všimli, že některé příklady mají nalevo od výsledků výplň. Takové vycpávky lze odstranit pomocí fm modifikátor formátu.

Příklad:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Výsledek:

€1.234,56

Nulové argumenty

Předávání null výsledkem je null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Výsledek:

null

Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null dochází v důsledku SQL SELECT prohlášení.

Můžete však použít SET NULL určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null by měl být vrácen.

Chybí argument

Volání funkce bez předání jakýchkoli argumentů má za následek chybu:

SELECT TO_CHAR()
FROM DUAL;

Výsledek:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Předání příliš mnoha argumentů také vede k chybě:

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Výsledek:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"

  1. Jaký je nejlepší způsob programového testování připojení SQL Server?

  2. Export výsledků dotazu Mysql do excelu?

  3. Nelze aktualizovat řádek v Sqlite v Androidu, ale nevyhazuje žádnou chybu

  4. SQL Server 2016:Vždy šifrováno