W Oracle Database liczby można formatować na wiele sposobów.
Na przykład możesz sformatować liczbę jako walutę, umieszczając przecinki i kropki dziesiętne we właściwym miejscu. Możesz określić wiodące zera, możesz dodać część ułamkową – lub usunąć ją, jeśli jest to wymagane.
Ten artykuł zawiera przykłady:
- Formatuj liczby jako walutę
- Dodaj separator przecinek/tysiące
- Uwzględnij miejsca po przecinku
- Usuń wszystkie miejsca po przecinku
- Dodaj wiodące zera do liczby
Wyjaśniam również, w jaki sposób parametry NLS sesji wpływają na formatowanie.
Parametry inicjalizacji NLS określają, które znaki są używane jako separator grup, znak dziesiętny i symbol waluty w bieżącej sesji. Możesz skorzystać z tych parametrów, aby wygenerować formatowanie uwzględniające ustawienia regionalne.
Możesz użyć funkcji takich jak TO_CHAR(number)
a nawet LPAD()
przekonwertować liczby na ciąg i sformatować je dokładnie tak, jak chcesz w locie. Funkcje takie jak CAST()
może również mieć wpływ na formatowanie liczby, w zależności od typu danych, na jaki jest rzutowana.
Szybki przykład
Oto szybki przykład formatowania liczby za pomocą TO_CHAR()
funkcja:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Wynik:
$12,345.00
fmL99G999D00
part to model formatu, który określa sposób formatowania danych wyjściowych. Możesz zmienić model formatu, aby dopasować go do swoich wymagań.
Każdy znak w modelu formatu jest elementem formatu i ma specjalne znaczenie. Możesz dodawać lub usuwać elementy formatu zgodnie z wymaganiami.
Oto pełna lista elementów formatu, których możesz użyć w swoim modelu formatu podczas formatowania liczb.
Chociaż prawdą jest, że możesz podać literał ciągu dla różnych elementów formatu (na przykład znak dolara ($
) dla dolarów), zakłada się, że waluta jest denominowana w tej zakodowanej wartości. Istnieje wiele innych możliwych walut na całym świecie, a elementy formatu są w stanie dynamicznie zwrócić symbol lokalnej waluty dla sesji użytkownika.
To samo dotyczy separatora grup i znaku dziesiętnego. Różne lokalizacje używają różnych konwencji. Korzystanie z tych elementów formatu uwzględniających ustawienia regionalne sprawia, że Twój kod jest bardziej przenośny.
Również TO_CHAR()
funkcja pozwala na przekazywanie własnych parametrów NLS w ramach funkcji. Wpłynie to tylko na to wywołanie funkcji, więc możesz zmieniać takie rzeczy, jak symbole waluty w locie, bez konieczności zakodowania ich na stałe w modelu formatu lub aktualizowania parametrów NLS dla swojej sesji.
Poniższe przykłady pokazują bardziej szczegółowo, jak każdy element formatu działa.
Formatuj liczby jako walutę
Oto przykład formatowania liczby jako waluty:
SELECT
TO_CHAR(12, 'fmL99')
FROM DUAL;
Wynik:
$12
W tym przypadku użyłem L
element formatu, aby określić symbol waluty lokalnej. Symbol waluty lokalnej jest określany przez NLS_CURRENCY
parametr.
Możesz alternatywnie użyć C
lub U
elementy formatu, które zwracają odpowiednio symbol waluty ISO i symbol podwójnej waluty.
Zobacz Jak formatować liczby jako walutę w Oracle, aby uzyskać więcej informacji i przykładów.
Dodaj separator przecinek/tysiące
Chociaż zawsze możesz użyć zakodowanego na stałe przecinka jako separatora tysięcy/grup, nie uwzględnia to krajów, które używają kropki jako separatora grup. Oczywiście jest odwrotnie. Ponadto niektóre kraje oddzielają tysiące grup cienką przestrzenią.
Możesz użyć G
element formatu, aby określić separator grup. To dynamicznie zwraca odpowiedni separator grupy, jak określono w NLS_NUMERIC_CHARACTERS
parametr. Ten parametr określa zarówno separator grupy, jak i znak dziesiętny.
Przykład:
SELECT
TO_CHAR(12345, 'fm99G999')
FROM DUAL;
Wynik:
12,345
Oto kolejny przykład z większą liczbą:
SELECT
TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;
Wynik:
123,456,789
Zobacz Jak sformatować liczbę z przecinkiem w Oracle, aby uzyskać bardziej szczegółową dyskusję.
Uwzględnij miejsca dziesiętne
Chociaż prawdą jest, że możesz na stałe zakodować własny znak podstawy (na przykład kropkę) w swoim modelu formatu, nie będzie to obsługiwać innych ustawień regionalnych, które używają innego znaku.
Możesz użyć D
element formatu do zwrócenia znaku dziesiętnego/podstawy określonego w NLS_NUMERIC_CHARACTERS
parametr dla bieżącej sesji:
SELECT
TO_CHAR(7, 'fm9D00')
FROM DUAL;
Wynik:
7.00
W tym przypadku użyłem dwóch 0
elementy formatu po znaku podstawy. Ten element formatu zwraca końcowe zera, jeśli ma to zastosowanie.
Korzystanie z 9
w tym przypadku pominie wszelkie końcowe zera:
SELECT
TO_CHAR(7, 'fm9D99')
FROM DUAL;
Wynik:
7.
Jeśli jednak usuniemy fm
modyfikator formatu, otrzymujemy inny wynik:
SELECT
TO_CHAR(7, '9D99')
FROM DUAL;
Wynik:
7.00
fm
modyfikator formatu pomija wszelkie dopełnienie, które zostało zastosowane do wyniku. Usuwając go, nasz wynik jest usztywniany. Zawiera wiodącą spację, ponieważ to tam znalazłby się znak ujemny, gdyby liczba była ujemna. Zawiera również końcowe zera, ponieważ określiliśmy dwa 9
elementy formatu.
Zobacz 3 sposoby formatowania liczby do 2 miejsc dziesiętnych w Oracle, aby uzyskać więcej pomysłów na formatowanie liczb z miejscami dziesiętnymi.
Usuń wszystkie miejsca dziesiętne
Istnieje kilka sposobów formatowania liczby bez miejsc dziesiętnych. Jednym z oczywistych sposobów jest po prostu usunięcie części dziesiętnej z naszego ciągu formatującego:
SELECT
TO_CHAR(7, 'fm9')
FROM DUAL;
Wynik:
7
Ale możemy również użyć innych funkcji, takich jak ROUND()
, TRUNC()
i CAST()
aby osiągnąć ten sam lub podobny efekt.
Zobacz 4 sposoby formatowania liczby bez ułamków dziesiętnych w Oracle, aby zapoznać się z przykładami.
Dodaj wiodące zera
Mamy kilka opcji, jeśli chodzi o dodawanie wiodących zer do naszej liczby.
Ponownie, trzymanie się TO_CHAR()
funkcji, możemy użyć 0
element formatu zwracający początkowe i końcowe zera.
SELECT
TO_CHAR(7, 'fm000')
FROM DUAL;
Wynik:
007
Gdybyśmy użyli 9
element formatu, nie mielibyśmy żadnych wiodących zer:
SELECT
TO_CHAR(7, 'fm999')
FROM DUAL;
Wynik:
7
Jeśli jednak usuniemy fm
modyfikator formatu, otrzymalibyśmy spację, w której dowolne wiodące zero byłoby:
SELECT
TO_CHAR(7, '999')
FROM DUAL;
Wynik:
7
Innym sposobem formatowania liczby z wiodącymi zerami jest użycie LPAD()
funkcjonować. Ta funkcja stosuje lewe dopełnienie ciągu lub liczby. Możesz określić, których znaków użyć do wypełnienia, więc jeśli użyjesz zera, zostanie ono uzupełnione zerami.
Zobacz przykład 2 sposoby formatowania liczby z wiodącymi zerami w Oracle.
Jak sprawdzić parametry NLS
Parametry NLS (National Language Support) określają zachowanie specyficzne dla ustawień narodowych zarówno na kliencie, jak i na serwerze. Obejmuje to parametry, które określają, których znaków użyć jako separatora grup, znaku dziesiętnego, symboli walut itp.
Sprawdźmy aktualną wartość moich parametrów NLS:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS;
Wynik:
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
Następujące parametry określają elementy formatowania liczb i walut:
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_DUAL_CURRENCY
Domyślna wartość tych parametrów jest określona przez NLS_TERRITORY
parametr. Kiedy ustawimy wartość NLS_TERRITORY
parametr, to niejawnie ustawia wartość dla różnych innych parametrów (w tym czterech wspomnianych).
W moim przypadku moje terytorium to Australia, więc te cztery parametry odzwierciedlają typowy format liczb w Australii. Gdybym miał to zmienić, aby powiedzieć, Niemcy, te cztery parametry zostałyby zaktualizowane, aby odzwierciedlić formatowanie dla Niemiec.
Możesz jednak osobno ustawić każdy parametr. Pozwala to nadpisać wartość, która została niejawnie ustawiona przez NLS_TERRITORY
parametr.