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

TO_CHAR(tal) Funktion i Oracle

I Oracle Database er TO_CHAR(number) funktion konverterer et tal til en VARCHAR2 værdi i formatet angivet af formatargumentet.

Syntaks

Syntaksen ser sådan ud:

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

Hvor:

  • n kan være af typen NUMBER , BINARY_FLOAT , eller BINARY_DOUBLE .
  • fmt er en valgfri formatmodel, der specificerer, hvordan resultatet skal formateres. Se de gyldige talformatelementer, der kan bruges til at konstruere din formatmodel.
  • 'nlsparam' er et valgfrit argument, der specificerer, hvordan forskellige tegn returneres. Du kan bruge den til at angive decimaltegn og gruppeseparator, det lokale valutasymbol og det internationale valutasymbol. Hvis dette argument udelades, bruges standardværdierne for den aktuelle session.

Eksempel

Her er et eksempel for at demonstrere, hvordan funktionen fungerer:

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

Resultat:

    RESULT 
__________ 
 12,345   

Det første argument er det faktiske tal, som vi formaterer, og det andet argument er formatmodellen. Formatmodellen angiver, hvordan tallet formateres.

I dette tilfælde formaterer vores formatmodel tallet med en gruppeseparator i den passende position. Hvert numerisk ciffer er repræsenteret af 9 , og gruppeseparatoren er repræsenteret af G .

Her er, hvad der sker, hvis vi ændrer formatmodellen lidt:

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

Resultat:

     RESULT 
___________ 
 012,345    

I dette tilfælde startede vi formatmodellen med en 0 Karakter. Dette returnerer et indledende nul, hvor det er relevant. 9 tegn returnerer ikke foranstillede nuller.

Faktisk kunne vi erstatte alle 9 s med 0 hvis vi vil. Her er en sammenligning, der viser, hvordan resultaterne kan variere ganske betydeligt, afhængigt af hvilket formatelement du bruger:

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

Resultat:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Valutasymboler

Du kan bruge L formatelement for at returnere det lokale valutasymbol.

Eksempel:

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

Resultat:

                 RESULT 
_______________________ 
          $12,345.00   

Dette eksempel bruger en formatmodel, der udlæser resultatet ved hjælp af det lokale valutasymbol (repræsenteret ved L ), en gruppeseparator (repræsenteret ved G ), et decimaltegn (repræsenteret ved D ), og selvfølgelig hvert numerisk ciffer (repræsenteret ved 9 ).

Det lokale valutasymbol bestemmes af den aktuelle værdi af NLS_CURRENCY parameter. Det er rigtigt, at vi kunne have brugt et dollartegn ($ ) for valutasymbolet, men det forudsætter, at valutaen er denomineret i dollars. Der er mange andre mulige valutaer rundt om i verden, og L formatelementet er i stand til dynamisk at returnere det lokale valutasymbol for brugerens session.

Se, hvordan du kontrollerer værdierne af NLS-parametrene, hvis du har brug for at kontrollere dem.

Se denne fulde liste over talformatelementer i Oracle for en liste over formatelementer, der kan bruges til at formatere tal med denne funktion.

Standardformat

Hvis du udelader fmt argument, konverteres tallet til en VARCHAR2 værdi præcis lang nok til at holde dens signifikante cifre.

Her er et eksempel på en konvertering af et tal uden at angive formatet:

SELECT TO_CHAR(525.45)
FROM DUAL;

Resultat:

525.45

'nlsparam' Argument

 'nlsparam' argument kan bruges til at specificere decimaltegn og gruppeseparator, det lokale valutasymbol og det internationale valutasymbol.

Det har følgende form:

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

Eksempel:

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

Resultat:

         €1.234,56

Her er den igen, men denne gang erstatter jeg L med C i formatmodellen:

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

Resultat:

      EUR1.234,56

C returnerer ISO-valutasymbolet, som i dette tilfælde er EUR .

Sådan undertrykkes polstringen

Du har måske bemærket, at nogle af eksemplerne har udfyldning til venstre for resultaterne. Sådan polstring kan fjernes med fm formatmodifikator.

Eksempel:

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

Resultat:

€1.234,56

Nul-argumenter

Sender null resulterer i null :

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

Resultat:

null

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Manglende argument

Kaldning af funktionen uden at sende nogen argumenter resulterer i en fejl:

SELECT TO_CHAR()
FROM DUAL;

Resultat:

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

Hvis du sender for mange argumenter, resulterer det også i en fejl:

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

Resultat:

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

  1. MySQL får manglende ID'er fra tabellen

  2. Fejlfinding AlwaysOn – Nogle gange kræver det mange sæt øjne

  3. Oracle SQL-udvikler:Fejl - Test mislykkedes:Netværksadapteren kunne ikke etablere forbindelsen?

  4. SQL Server 2017:Tilgængelige funktioner på Linux