Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak formatować liczby w Oracle

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Opcja dostawy podczas składania równoległego żądania w R12.1.3

  2. Wydajne odczytywanie i importowanie plików CSV w Oracle PL/SQL

  3. XMLAGG z problemem RTRIM

  4. Wielkie litery w nazwach dni i miesięcy podczas formatowania dat w Oracle

  5. Zapytanie przestawne Oracle SQL