W bazie danych Oracle TO_CHAR(number)
funkcja konwertuje liczbę na VARCHAR2
wartość w formacie określonym przez argument format.
Składnia
Składnia wygląda tak:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Gdzie:
n
może być typuNUMBER
,BINARY_FLOAT
lubBINARY_DOUBLE
.fmt
to opcjonalny model formatu, który określa sposób formatowania wyniku. Zobacz prawidłowe elementy formatu liczb, których można użyć do skonstruowania modelu formatu.'nlsparam'
jest opcjonalnym argumentem, który określa sposób zwracania różnych znaków. Można go użyć do określenia znaku dziesiętnego i separatora grupy, symbolu waluty lokalnej i symbolu waluty międzynarodowej. Jeśli ten argument zostanie pominięty, używane są wartości domyślne dla bieżącej sesji.
Przykład
Oto przykład pokazujący, jak działa funkcja:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Wynik:
RESULT __________ 12,345
Pierwszy argument to rzeczywista liczba, którą formatujemy, a drugi argument to model formatu. Model formatu określa sposób formatowania liczby.
W takim przypadku nasz model formatu formatuje liczbę z separatorem grup w odpowiedniej pozycji. Każda cyfra jest reprezentowana przez 9
, a separator grup jest reprezentowany przez G
.
Oto, co się stanie, jeśli nieznacznie zmienimy model formatu:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Wynik:
RESULT ___________ 012,345
W tym przypadku rozpoczęliśmy model formatu od 0
postać. Zwraca wiodące zero, gdy ma to zastosowanie. 9
znak nie zwraca wiodących zer.
W rzeczywistości moglibyśmy zastąpić wszystkie 9
s z 0
jeśli chcemy. Oto porównanie, które pokazuje, jak bardzo wyniki mogą się różnić, w zależności od używanego elementu formatu:
SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Wynik:
000G000 999G999 ___________ ___________ 000,012 12
Symbole walut
Możesz użyć L
element formatu, aby zwrócić symbol waluty lokalnej.
Przykład:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Wynik:
RESULT _______________________ $12,345.00
W tym przykładzie zastosowano model formatu, który wyświetla wynik przy użyciu symbolu waluty lokalnej (reprezentowanej przez L
), separator grup (reprezentowany przez G
), znak dziesiętny (reprezentowany przez D
) i oczywiście każdą cyfrę (reprezentowaną przez 9
).
Symbol waluty lokalnej jest określany przez bieżącą wartość NLS_CURRENCY
parametr. Prawdą jest, że mogliśmy użyć znaku dolara ($
) dla symbolu waluty, ale zakłada się, że waluta jest denominowana w dolarach. Istnieje wiele innych możliwych walut na całym świecie, a L
element format jest w stanie dynamicznie zwrócić symbol lokalnej waluty dla sesji użytkownika.
Zobacz Jak sprawdzić wartości parametrów NLS, jeśli chcesz je sprawdzić.
Zobacz pełną listę elementów formatu liczb w Oracle, aby zapoznać się z listą elementów formatu, których można użyć do formatowania liczb za pomocą tej funkcji.
Format domyślny
Jeśli pominiesz fmt
argument, liczba jest konwertowana na VARCHAR2
wartość dokładnie na tyle długa, aby zmieścić jej znaczące cyfry.
Oto przykład konwersji liczby bez określenia formatu:
SELECT TO_CHAR(525.45)
FROM DUAL;
Wynik:
525.45
'nlsparam'
Argument
'nlsparam'
argument może być użyty do określenia znaku dziesiętnego i separatora grupy, symbolu waluty lokalnej i symbolu waluty międzynarodowej.
Przybiera następującą formę:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Przykład:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Wynik:
€1.234,56
Tutaj jest znowu, ale tym razem zastępuję L
z C
w modelu formatu:
SELECT
TO_CHAR(
1234.56,
'C99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Wynik:
EUR1.234,56
C
zwraca symbol waluty ISO, którym w tym przypadku jest EUR
.
Jak stłumić wypełnienie
Być może zauważyłeś, że w niektórych przykładach zastosowano dopełnienie po lewej stronie wyników. Takie wypełnienie można usunąć za pomocą fm
modyfikator formatu.
Przykład:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Wynik:
€1.234,56
Argumenty zerowe
Przekazywanie null
wyniki w null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Brakujący argument
Wywołanie funkcji bez przekazywania żadnych argumentów powoduje błąd:
SELECT TO_CHAR()
FROM DUAL;
Wynik:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Przekazywanie zbyt wielu argumentów również powoduje błąd:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Wynik:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"