sql >> Database teknologi >  >> RDS >> Oracle

Sådan formateres tal i Oracle

I Oracle Database kan du formatere tal på mange måder.

For eksempel kan du formatere et tal som en valuta, med kommaer og decimaler på det rigtige sted. Du kan angive foranstillede nuller, du kan tilføje en brøkdel – eller fjerne den, hvis det er det, der kræves.

Denne artikel indeholder eksempler på følgende:

  • Formatér tal som valuta
  • Tilføj et komma/tusinde-separator
  • Medtag decimaler
  • Fjern alle decimaler
  • Tilføj indledende nuller til et tal

Jeg forklarer også, hvordan formatering påvirkes af din sessions NLS-parametre.

NLS initialiseringsparametre bestemmer, hvilke tegn der bruges til gruppeseparator, decimaltegn og valutasymbol i den aktuelle session. Du kan drage fordel af disse parametre til at udlæse lokalitetsbevidst formatering.

Du kan bruge funktioner som TO_CHAR(number) og endda LPAD() at konvertere tal til en streng og formatere dem nøjagtigt, som du har lyst, når du er på farten. Funktioner som CAST() kan også have en effekt på, hvordan et tal formateres, afhængigt af den datatype, det bliver castet som.

Et hurtigt eksempel

Her er et hurtigt eksempel på formatering af et tal ved hjælp af TO_CHAR() funktion:

SELECT 
    TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;

Resultat:

$12,345.00

fmL99G999D00 del er en formatmodel, der bestemmer, hvordan outputtet skal formateres. Du kan ændre formatmodellen, så den passer til dine behov.

Hvert tegn i formatmodellen er et formatelement og har en særlig betydning. Du kan tilføje eller fjerne formatelementer efter behov.

Her er en komplet liste over formatelementer, som du kan bruge til din formatmodel, når du formaterer tal.

Selvom det er rigtigt, at du kan angive en streng bogstavelig for forskellige formatelementer (f.eks. et dollartegn ($ ) for dollars), forudsætter dette, at valutaen er denomineret i den hårdkodede værdi. Der er mange andre mulige valutaer rundt om i verden, og formatelementerne er i stand til dynamisk at returnere det lokale valutasymbol for brugerens session.

Det er det samme for gruppeseparatoren og decimaltegn. Forskellige lokaliteter bruger forskellige konventioner. Brug af disse lokalitetsbevidste formatelementer gør din kode mere bærbar.

Også TO_CHAR() funktionen giver dig mulighed for at indtaste dine egne NLS-parametre i funktionen. Hvis du gør det, påvirker det kun det funktionskald, så du kan ændre ting som f.eks. valutasymboler i farten uden at skulle hardkode det ind i din formatmodel eller opdatere NLS-parametrene for din session.

De følgende eksempler viser, hvordan hvert formatelement fungerer mere detaljeret.

Formatér tal som valuta

Her er et eksempel på formatering af et tal som valuta:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Resultat:

$12

I dette tilfælde brugte jeg L formatelement for at angive det lokale valutasymbol. Det lokale valutasymbol bestemmes af NLS_CURRENCY parameter.

Du kan alternativt bruge C eller U formatelementer, som returnerer henholdsvis ISO-valutasymbolet og dobbeltvalutasymbolet.

Se Sådan formateres tal som valuta i Oracle for mere information og eksempler.

Tilføj en komma-/tusinderseparator

Selvom du altid kan bruge et hårdkodet komma til din tusinder/gruppeseparator, tager dette ikke højde for lande, der bruger et punktum for deres gruppeseparator. Det omvendte er åbenbart sandt. Nogle lande adskiller også tusindvis af grupper med et tyndt mellemrum.

Du kan bruge G formatelement for at angive en gruppeseparator. Dette returnerer dynamisk den relevante gruppeseparator som angivet i NLS_NUMERIC_CHARACTERS parameter. Denne parameter bestemmer både gruppeseparatoren og decimaltegn.

Eksempel:

SELECT 
    TO_CHAR(12345, 'fm99G999')
FROM DUAL;

Resultat:

12,345

Her er et andet eksempel med et større tal:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Resultat:

123,456,789

Se Sådan formateres et tal med komma i Oracle for en mere detaljeret diskussion.

Medtag decimaler

Selvom det er rigtigt, at du kan hardkode dit eget radix-tegn (for eksempel et punktum) i din formatmodel, vil dette ikke tage højde for andre lokaliteter, der bruger et andet tegn.

Du kan bruge D formatelement for at returnere decimal-/radix-tegnet, der er angivet i NLS_NUMERIC_CHARACTERS parameter for den aktuelle session:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Resultat:

7.00

I dette tilfælde brugte jeg to 0 formater elementer efter radix-tegnet. Dette formatelement returnerer efterfølgende nuller, hvor det er relevant.

Brug af en 9 ville undertrykke eventuelle efterfølgende nuller i dette tilfælde:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Resultat:

7.

Men hvis vi fjerner fm formatmodifikator, får vi et andet resultat:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Resultat:

 7.00

fm formatmodifikator undertrykker enhver udfyldning, der er blevet anvendt på resultatet. Ved at fjerne det, er vores resultat polstret. Den indeholder et indledende mellemrum, fordi det er her, et negativt fortegn ville være gået, hvis tallet havde været negativt. Og den indeholder også efterfølgende nuller, fordi vi specificerede to 9 formatelementer.

Se 3 måder at formatere et tal til 2 decimaler i Oracle for at få flere ideer til, hvordan man formaterer tal med decimaler.

Fjern alle decimaler

Der er flere måder at formatere et tal på, så det ikke har nogen decimaler. En oplagt måde er simpelthen at fjerne decimaldelen fra vores formatstreng:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Resultat:

7

Men vi kan også bruge andre funktioner, såsom ROUND() , TRUNC() og CAST() for at opnå den samme eller lignende effekt.

Se 4 måder at formatere et tal uden decimaler på i Oracle for eksempler.

Tilføj førende nuller

Vi har et par muligheder, når det kommer til at tilføje indledende nuller til vores nummer.

Igen, holde sig til TO_CHAR() funktion, kan vi bruge 0 formatelement for at returnere indledende og efterfølgende nuller.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Resultat:

007

Hvis vi havde brugt 9 formatelement, ville vi ikke have fået nogen foranstillede nuller:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Resultat:

7

Men hvis vi fjerner fm formatmodifikator, ville vi have fået et mellemrum, hvor et hvilket som helst indledende nul ville have været:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Resultat:

   7

En anden måde at formatere et tal med foranstillede nuller er med LPAD() fungere. Denne funktion anvender venstre polstring på en streng eller et tal. Du kan angive hvilke tegn, der skal bruges til udfyldningen, og hvis du bruger et nul, vil det blive udfyldt med nuller.

Se 2 måder at formatere et tal med førende nuller i Oracle for et eksempel.

Sådan kontrolleres NLS-parametrene

NLS-parametrene (National Language Support) bestemmer den lokalespecifikke adfærd på både klienten og serveren. Dette inkluderer parametre, der bestemmer, hvilke tegn der skal bruges til gruppeseparator, decimaltegn, valutasymboler osv.

Lad os tjekke den aktuelle værdi af mine NLS-parametre:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Resultat:

                 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                            

Følgende parametre bestemmer formateringselementer for tal og valutaer:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Standardværdien for disse parametre bestemmes af NLS_TERRITORY parameter. Når vi indstiller værdien af ​​NLS_TERRITORY parameter, sætter dette implicit værdien for forskellige andre parametre (inklusive de fire nævnte).

I mit tilfælde er mit territorium Australien, og derfor afspejler disse fire parametre, hvordan tal typisk er formateret i Australien. Hvis jeg skulle ændre det til at sige, Tyskland, så ville disse fire parametre blive opdateret for at afspejle formateringen for Tyskland.

Du kan dog udtrykkeligt indstille hver parameter individuelt. Dette giver dig mulighed for at tilsidesætte den værdi, der implicit blev angivet af NLS_TERRITORY parameter.


  1. PostgreSQL kolonne foo eksisterer ikke, hvor foo er værdien

  2. Hvordan SECOND() virker i MariaDB

  3. Tilføj 2 timer til nuværende tid i MySQL?

  4. opbygge dynamisk SQL-forespørgsel med psycopg2 python-bibliotek og ved hjælp af gode konverteringsværktøjer