sql >> Database >  >> RDS >> Oracle

TO_CHAR(getal) Functie in Oracle

In Oracle Database, de TO_CHAR(number) functie converteert een getal naar een VARCHAR2 waarde in het formaat gespecificeerd door het formaat argument.

Syntaxis

De syntaxis gaat als volgt:

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

Waar:

  • n kan van het type NUMBER . zijn , BINARY_FLOAT , of BINARY_DOUBLE .
  • fmt is een optioneel formaatmodel dat aangeeft hoe het resultaat moet worden opgemaakt. Bekijk de geldige getalnotatie-elementen die kunnen worden gebruikt om uw notatiemodel te construeren.
  • 'nlsparam' is een optioneel argument dat aangeeft hoe verschillende tekens worden geretourneerd. U kunt het gebruiken om het decimale teken en het groepsscheidingsteken, het lokale valutasymbool en het internationale valutasymbool op te geven. Als dit argument wordt weggelaten, worden de standaardwaarden voor de huidige sessie gebruikt.

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe de functie werkt:

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Resultaat:

    RESULT 
__________ 
 12,345   

Het eerste argument is het werkelijke aantal dat we opmaken, en het tweede argument is het formaatmodel. Het formaatmodel geeft aan hoe het getal wordt opgemaakt.

In dit geval maakt ons formaatmodel het getal op met een groepsscheidingsteken op de juiste positie. Elk numeriek cijfer wordt vertegenwoordigd door 9 , en het groepsscheidingsteken wordt weergegeven door G .

Dit is wat er gebeurt als we het formaatmodel enigszins wijzigen:

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Resultaat:

     RESULT 
___________ 
 012,345    

In dit geval zijn we het formaatmodel begonnen met een 0 karakter. Dit retourneert waar van toepassing een voorloopnul. De 9 karakter geeft geen voorloopnullen terug.

We zouden zelfs alle 9 . kunnen vervangen s met 0 s als we willen. Hier is een vergelijking die laat zien hoe de resultaten behoorlijk kunnen verschillen, afhankelijk van welk formaatelement je gebruikt:

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Resultaat:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Valutasymbolen

U kunt de L . gebruiken format-element om het lokale valutasymbool te retourneren.

Voorbeeld:

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Resultaat:

                 RESULT 
_______________________ 
          $12,345.00   

In dit voorbeeld wordt een formaatmodel gebruikt dat het resultaat uitvoert met het lokale valutasymbool (weergegeven door L ), een groepsscheidingsteken (weergegeven door G ), een decimaal teken (weergegeven door D ), en natuurlijk elk numeriek cijfer (weergegeven door 9 ).

Het lokale valutasymbool wordt bepaald door de huidige waarde van de NLS_CURRENCY parameter. Het is waar dat we een dollarteken hadden kunnen gebruiken ($ ) voor het valutasymbool, maar dat veronderstelt dat de valuta in dollars is uitgedrukt. Er zijn veel andere mogelijke valuta's over de hele wereld, en de L format-element kan het lokale valutasymbool dynamisch retourneren voor de sessie van de gebruiker.

Zie Hoe u de waarden van de NLS-parameters kunt controleren als u ze moet controleren.

Zie deze volledige lijst met elementen van getalnotatie in Oracle voor een lijst van formaatelementen die kunnen worden gebruikt om getallen op te maken met deze functie.

Standaardformaat

Als u de fmt . weglaat argument, wordt het getal geconverteerd naar een VARCHAR2 waarde precies lang genoeg om de significante cijfers vast te houden.

Hier is een voorbeeld van het converteren van een getal zonder het formaat op te geven:

SELECT TO_CHAR(525.45)
FROM DUAL;

Resultaat:

525.45

De 'nlsparam' Argument

De 'nlsparam' argument kan worden gebruikt om het decimaalteken en het groepsscheidingsteken, het lokale valutasymbool en het internationale valutasymbool op te geven.

Het heeft de volgende vorm:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Voorbeeld:

SELECT 
    TO_CHAR(
        1234.56, 
        'L99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultaat:

         €1.234,56

Hier is het weer, maar deze keer vervang ik L met C in het formaatmodel:

SELECT 
    TO_CHAR(
        1234.56, 
        'C99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultaat:

      EUR1.234,56

De C geeft het ISO-valutasymbool terug, in dit geval EUR .

Hoe de vulling te onderdrukken

Het is u misschien opgevallen dat op sommige voorbeelden links van de resultaten opvulling is toegepast. Dergelijke opvulling kan worden verwijderd met de fm formaatmodificator.

Voorbeeld:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultaat:

€1.234,56

Nullargumenten

Doorgeven van null resulteert in null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Resultaat:

null

Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null treedt op als resultaat van een SQL SELECT uitspraak.

U kunt echter SET NULL . gebruiken om een ​​andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null moet worden geretourneerd.

Ontbrekend argument

Het aanroepen van de functie zonder argumenten door te geven, resulteert in een fout:

SELECT TO_CHAR()
FROM DUAL;

Resultaat:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Het doorgeven van te veel argumenten resulteert ook in een fout:

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Resultaat:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"

  1. Hoe geef ik letterlijk de datum op bij het schrijven van SQL-query's vanuit SQL Server die is gekoppeld aan Oracle?

  2. Retourneer alle mogelijke combinaties van waarden op kolommen in SQL

  3. AVG()-functie in PostgreSQL

  4. Hoe kunnen we de hoofdtekst van de gecodeerde opgeslagen procedure in SSMS bekijken?