sql >> Databasteknik >  >> RDS >> Oracle

Hur man formaterar siffror i Oracle

I Oracle Database kan du formatera siffror på många sätt.

Du kan till exempel formatera ett tal som en valuta, med kommatecken och decimaler på rätt plats. Du kan ange inledande nollor, du kan lägga till en bråkdel – eller ta bort den, om det är vad som krävs.

Den här artikeln innehåller exempel på följande:

  • Formatera siffror som valuta
  • Lägg till en komma-/tusentalsavgränsare
  • Inkludera decimaler
  • Ta bort alla decimaler
  • Lägg till inledande nollor till ett tal

Jag förklarar också hur formatering påverkas av din sessions NLS-parametrar.

NLS-initieringsparametrar bestämmer vilka tecken som används för gruppavgränsare, decimaltecken och valutasymbol i den aktuella sessionen. Du kan dra fördel av dessa parametrar för att mata ut språkmedveten formatering.

Du kan använda funktioner som TO_CHAR(number) och till och med LPAD() att konvertera siffror till en sträng och formatera dem precis som du vill i farten. Funktioner som CAST() kan också ha en effekt på hur ett tal formateras, beroende på vilken datatyp det castas som.

Ett snabbt exempel

Här är ett snabbt exempel på hur du formaterar ett tal med TO_CHAR() funktion:

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

Resultat:

$12,345.00

fmL99G999D00 del är en formatmodell som bestämmer hur utdata ska formateras. Du kan ändra formatmodellen så att den passar dina behov.

Varje tecken i formatmodellen är ett formatelement och har en speciell betydelse. Du kan lägga till eller ta bort formatelement efter behov.

Här är en fullständig lista över formatelement som du kan använda för din formatmodell när du formaterar siffror.

Även om det är sant att du kan tillhandahålla en bokstavlig sträng för olika formatelement (till exempel ett dollartecken ($ ) för dollar) förutsätter detta att valutan är denominerad i det hårdkodade värdet. Det finns många andra möjliga valutor runt om i världen, och formatelementen kan dynamiskt returnera den lokala valutasymbolen för användarens session.

Det är samma sak för gruppavgränsaren och decimaltecken. Olika lokaler använder olika konventioner. Genom att använda dessa språkmedvetna formatelement blir din kod mer portabel.

Även TO_CHAR() funktionen låter dig skicka in dina egna NLS-parametrar i funktionen. Att göra det påverkar bara det funktionsanropet, så du kan ändra saker som valutasymboler i farten utan att behöva hårdkoda det i din formatmodell eller uppdatera NLS-parametrarna för din session.

Följande exempel visar mer detaljerat hur varje formatelement fungerar.

Formatera siffror som valuta

Här är ett exempel på hur du formaterar ett tal som valuta:

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

Resultat:

$12

I det här fallet använde jag L formatelement för att ange symbolen för lokal valuta. Den lokala valutasymbolen bestäms av NLS_CURRENCY parameter.

Du kan alternativt använda C eller U formatelement, som returnerar ISO-valutasymbolen respektive dubbelvalutasymbolen.

Se Hur man formaterar siffror som valuta i Oracle för mer information och exempel.

Lägg till en komma-/tusenavgränsare

Även om du alltid kan använda ett hårdkodat kommatecken för din tusentals/gruppseparator, tar detta inte hänsyn till länder som använder en punkt för sin gruppseparator. Det omvända är uppenbarligen sant. Dessutom separerar vissa länder tusentals grupper med ett tunt utrymme.

Du kan använda G formatelement för att ange en gruppseparator. Detta returnerar dynamiskt den tillämpliga gruppseparatorn som anges i NLS_NUMERIC_CHARACTERS parameter. Denna parameter bestämmer både gruppavgränsaren och decimaltecknet.

Exempel:

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

Resultat:

12,345

Här är ett annat exempel med ett större antal:

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

Resultat:

123,456,789

Se Hur man formaterar ett nummer med kommatecken i Oracle för en mer detaljerad diskussion.

Inkludera decimaler

Även om det är sant att du kan hårdkoda ditt eget radixtecken (till exempel en punkt) i din formatmodell, kommer detta inte att tillgodose andra lokaler som använder ett annat tecken.

Du kan använda D formatelement för att returnera decimal-/radixtecknet som anges i NLS_NUMERIC_CHARACTERS parameter för den aktuella sessionen:

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

Resultat:

7.00

I det här fallet använde jag två 0 formatera element efter tecknet radix. Detta formatelement returnerar avslutande nollor där det är tillämpligt.

Använda en 9 skulle undertrycka alla avslutande nollor i detta fall:

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

Resultat:

7.

Men om vi tar bort fm formatmodifierare får vi ett annat resultat:

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

Resultat:

 7.00

fm formatmodifierare undertrycker all utfyllnad som har tillämpats på resultatet. Genom att ta bort det blir vårt resultat vadderat. Den innehåller ett inledande mellanslag, eftersom det är dit ett negativt tecken skulle ha gått om talet hade varit negativt. Och den innehåller också avslutande nollor, eftersom vi angav två 9 formatelement.

Se 3 sätt att formatera ett tal till 2 decimaler i Oracle för fler idéer om hur man formaterar tal med decimaler.

Ta bort alla decimaler

Det finns flera sätt att formatera ett tal så att det inte har några decimaler. Ett uppenbart sätt är att helt enkelt ta bort decimaldelen från vår formatsträng:

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

Resultat:

7

Men vi kan också använda andra funktioner, såsom ROUND() , TRUNC() och CAST() för att uppnå samma eller liknande effekt.

Se 4 sätt att formatera ett tal utan decimaler i Oracle för exempel.

Lägg till inledande nollor

Vi har ett par alternativ när det gäller att lägga till inledande nollor till vårt nummer.

Återigen, håller fast vid TO_CHAR() funktionen kan vi använda 0 formatelement för att returnera inledande och efterföljande nollor.

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

Resultat:

007

Om vi ​​hade använt 9 formatelement, skulle vi inte ha fått några inledande nollor:

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

Resultat:

7

Men om vi tar bort fm formatmodifierare, skulle vi ha fått ett mellanslag där varje inledande nolla skulle ha varit:

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

Resultat:

   7

Ett annat sätt att formatera ett tal med inledande nollor är med LPAD() fungera. Denna funktion tillämpar vänster utfyllnad på en sträng eller ett nummer. Du kan ange vilka tecken som ska användas för utfyllnaden, och om du använder en nolla kommer den att fyllas med nollor.

Se 2 sätt att formatera ett tal med ledande nollor i Oracle för ett exempel.

Hur man kontrollerar NLS-parametrarna

NLS-parametrarna (National Language Support) bestämmer det språkspecifika beteendet på både klienten och servern. Detta inkluderar parametrar som bestämmer vilka tecken som ska användas för gruppavgränsare, decimaltecken, valutasymboler osv.

Låt oss kontrollera det aktuella värdet på mina NLS-parametrar:

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öljande parametrar bestämmer formateringselement för siffror och valutor:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Standardvärdet för dessa parametrar bestäms av NLS_TERRITORY parameter. När vi ställer in värdet för NLS_TERRITORY parameter, ställer detta implicit in värdet för olika andra parametrar (inklusive de fyra nämnda).

I mitt fall är mitt territorium Australien, så dessa fyra parametrar återspeglar hur siffror vanligtvis formateras i Australien. Om jag skulle ändra det till att säga, Tyskland, då skulle dessa fyra parametrar uppdateras för att återspegla formateringen för Tyskland.

Du kan dock uttryckligen ställa in varje parameter individuellt. Detta låter dig åsidosätta värdet som implicit ställts in av NLS_TERRITORY parameter.


  1. bbPress:Hur man hittar mappningar av bilagor till deras respektive inlägg

  2. Hur man installerar PgBackRest

  3. Hur anropar man oracles lagrad procedur som inkluderar användardefinierad typ i java?

  4. Använder variabel i SQL LIKE-satsen