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 typuNUMBER
,BINARY_FLOAT
neboBINARY_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"