sql >> Databasteknik >  >> RDS >> Oracle

4 sätt att formatera ett tal utan decimaler i Oracle

När du använder Oracle Database kan du använda funktioner som TO_CHAR(number) för att returnera siffror som en sträng. Detta gör att du kan formatera talet så att det har ett visst antal decimaler – inklusive inga decimaler, om det är vad du vill.

Du kan också använda funktioner som ROUND(number) och TRUNC(number) för att avrunda eller trunkera talet utan decimaler.

Det finns också CAST() funktion som låter dig casta en datatyp som ett heltal, vilket effektivt tar bort alla decimaler.

TO_CHAR() Funktion

Här är ett exempel som använder TO_CHAR(number) funktion:

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

Resultat:

1,235

I det här fallet består min formatmodell av:

  • en fm , som är en formatmodifierare som tar bort alla inledande och/eller avslutande utfyllnadstecken som kan läggas till i resultatet.
  • flera 9 tecken, som representerar varje siffra
  • ett G tecken, som representerar en platsmedveten gruppavgränsare

Det viktiga att notera är att den inte använder D formatelement, som är det formatmedvetna decimaltecknet. Det använder inte heller några bokstavliga decimaltecken (som ett kommatecken eller punkt). Och eftersom det inte har några decimaltecken finns det uppenbarligen inga siffror efter ett sådant tecken.

Om vi ​​gjorde det ha ett decimaltecken, valfri 9 eller 0 element till höger om det kan leda till att decimaler inkluderas i resultatet.

Exempel:

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

Resultat:

7.00

För att undertrycka de avslutande nollorna kan vi ändra 0 tecken till 9 s. Men att ta bort fm modifierare kan resultera i att efterföljande nollor visas även när du använder 9 formatelement.

Här är en jämförelse för att illustrera vad jag menar:

SELECT 
    TO_CHAR(7, 'fm99D00') AS "r1",
    TO_CHAR(7, 'fm99D99') AS "r2",
    TO_CHAR(7, '99D99') AS "r3"
FROM DUAL;

Resultat:

     r1    r2        r3 
_______ _____ _________ 
7.00    7.      7.00   

ROUND() Funktion

Här är ett exempel som använder ROUND(number) funktion:

SELECT ROUND(1234.56, 0)
FROM DUAL;

Resultat:

1235

ROUND() funktion avrundar ett tal till en given decimal. Här angav vi noll decimaler, vilket tar bort alla decimaler från talet.

I det här fallet avrundades siffran uppåt.

TRUNC() Funktion

Här är ett exempel som använder TRUNC(number) funktion:

SELECT TRUNC(1234.56, 0)
FROM DUAL;

Resultat:

1234

TRUNC() funktion trunkerar ett tal till en given decimal. Ingen avrundning sker. Därför trunkerades detta tal till noll decimaler, utan avrundning.

CAST() Funktion

Här är ett exempel som använder CAST() funktion:

SELECT CAST(1234.56 AS INT) 
FROM DUAL;

Resultat:

1235

CAST() funktion konverterar sitt argument till en annan datatyp. I det här fallet konverterade vi talet till ett heltal. Heltal har inga decimaler, så alla bråkdelar tas bort från resultatet (inklusive decimaltecknet). Observera att resultatet har avrundats uppåt.


  1. Hur man använder cPanel MySQL Database Wizard

  2. Får NoClassDefFoundError när jag försöker använda Proguard och SQLcipher i Android

  3. Kommentera karaktär/tecken i postgres / postgresql / psql?

  4. SQL:Välj dynamiskt kolumnnamn baserat på variabel