sql >> Databasteknik >  >> RDS >> Oracle

TO_CHAR(nummer) Funktion i Oracle

I Oracle Database, TO_CHAR(number) funktion konverterar ett tal till en VARCHAR2 värde i formatet som anges av formatargumentet.

Syntax

Syntaxen ser ut så här:

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

Var:

  • n kan vara av typen NUMBER , BINARY_FLOAT , eller BINARY_DOUBLE .
  • fmt är en valfri formatmodell som anger hur resultatet ska formateras. Se de giltiga talformatelementen som kan användas för att konstruera din formatmodell.
  • 'nlsparam' är ett valfritt argument som anger hur olika tecken returneras. Du kan använda den för att ange decimaltecknet och gruppavgränsaren, den lokala valutasymbolen och den internationella valutasymbolen. Om detta argument utelämnas används standardvärdena för den aktuella sessionen.

Exempel

Här är ett exempel för att visa hur funktionen fungerar:

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

Resultat:

    RESULT 
__________ 
 12,345   

Det första argumentet är det faktiska numret som vi formaterar, och det andra argumentet är formatmodellen. Formatmodellen anger hur numret formateras.

I det här fallet formaterar vår formatmodell numret med en gruppavgränsare i lämplig position. Varje siffra representeras av 9 , och gruppseparatorn representeras av G .

Så här händer om vi ändrar formatmodellen något:

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

Resultat:

     RESULT 
___________ 
 012,345    

I det här fallet startade vi formatmodellen med en 0 karaktär. Detta returnerar en inledande nolla där det är tillämpligt. 9 tecken returnerar inte inledande nollor.

Faktum är att vi skulle kunna ersätta alla 9 s med 0 s om vi vill. Här är en jämförelse som visar hur resultaten kan skilja sig ganska mycket, beroende på vilket formatelement du använder:

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

Resultat:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Valutasymboler

Du kan använda L formatelement för att returnera den lokala valutasymbolen.

Exempel:

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

Resultat:

                 RESULT 
_______________________ 
          $12,345.00   

Det här exemplet använder en formatmodell som matar ut resultatet med hjälp av symbolen för lokal valuta (representerad av L ), en gruppseparator (representerad av G ), ett decimaltecken (representerat av D ), och naturligtvis varje numerisk siffra (representerad av 9 ).

Den lokala valutasymbolen bestäms av det aktuella värdet på NLS_CURRENCY parameter. Det är sant att vi kunde ha använt ett dollartecken ($ ) för valutasymbolen, men det förutsätter att valutan är denominerad i dollar. Det finns många andra möjliga valutor runt om i världen, och L formatelementet kan dynamiskt returnera den lokala valutasymbolen för användarens session.

Se Hur du kontrollerar värdena för NLS-parametrarna om du behöver kontrollera dem.

Se den här fullständiga listan över nummerformatelement i Oracle för en lista över formatelement som kan användas för att formatera tal med den här funktionen.

Standardformat

Om du utelämnar fmt argument, konverteras numret till en VARCHAR2 värde exakt tillräckligt länge för att hålla dess signifikanta siffror.

Här är ett exempel på att konvertera ett tal utan att ange formatet:

SELECT TO_CHAR(525.45)
FROM DUAL;

Resultat:

525.45

'nlsparam' Argument

Den 'nlsparam' argument kan användas för att specificera decimaltecknet och gruppavgränsaren, den lokala valutasymbolen och den internationella valutasymbolen.

Den har följande form:

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

Exempel:

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

Resultat:

         €1.234,56

Här är den igen, men den här gången byter jag ut 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 returnerar ISO-valutasymbolen, som i det här fallet är EUR .

Hur man dämpar stoppningen

Du kanske har märkt att några av exemplen har utfyllnad till vänster om resultaten. Sådan utfyllnad kan tas bort med fm formatmodifierare.

Exempel:

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

Resultat:

€1.234,56

Nollargument

Skickar null resulterar i null :

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

Resultat:

null

Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null uppstår som ett resultat av en SQL SELECT påstående.

Du kan dock använda SET NULL för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null bör returneras.

Argument saknas

Att anropa funktionen utan att skicka några argument resulterar i ett fel:

SELECT TO_CHAR()
FROM DUAL;

Resultat:

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

Att skicka för många argument resulterar också i ett fel:

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. Det går inte att logga in på SQL Server + SQL Server Authentication + Fel:18456

  2. PostgreSQL:Ta bort attribut från JSON-kolumnen

  3. Hur man beräknar ålder i MariaDB

  4. SQL Server:Användbara tips för nybörjare