sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur Round() fungerar i PostgreSQL

I PostgreSQL, round() funktionen används för att avrunda ett tal.

Funktionen kan fungera på ett av två sätt, beroende på hur du använder den. Du kan göra det avrunda talet till närmaste heltal eller till ett visst antal decimaler.

Detta bestäms av antalet argument du skickar till funktionen när du anropar den.

Syntax

round() funktionen kan användas på något av följande sätt:

round(dp or numeric)
round(v numeric, s int) 

Den första syntaxen avrundar talet till närmaste heltal. dp indikerar double precision .

Den andra syntaxen avrundar den till ett visst antal decimaler. I det här fallet, v är numret och s är antalet decimaler.

Returtypen för denna funktion är densamma som inmatningstypen.

Exempel på första syntax

Här är ett exempel som använder den första syntaxen.

SELECT round(13.50); 

Resultat:

14

I det här fallet är bråksekunderna 50 och därför avrundas talet upp till närmaste heltal.

Om bråksekunderna var mindre än 50 skulle det ha avrundats nedåt och resultatet skulle bli 13.

Här är ett exempel på det.

SELECT round(13.49); 

Resultat:

13

Exempel på andra syntax

Här är ett exempel som använder den andra syntaxen.

SELECT round(13.50, 1); 

Resultat:

13,5

I det här fallet avrundades ingenting uppåt och noll tappades helt enkelt. I sådana fall returnerar det samma resultat som vi skulle ha sett om vi hade använt trunc() fungera.

Men om vi justerar bråksekunderna något ser vi att resultatet är avrundat.

SELECT 
  round(13.45, 1) AS "13.45",
  round(13.44, 1) AS "13.44"; 

Resultat:

13.45 | 13.44-------+-------13.5 | 13.4

Det är dock viktigt att notera att resultatet är helt beroende av hur många bråkdelar du anger i det andra argumentet.

Här är samma exempel igen, men med två decimaler angivna.

SELECT 
  round(13.45, 2) AS "13.45",
  round(13.44, 2) AS "13.44"; 

Resultat:

13.45 | 13.44-------+-------13.45 | 13.44

I det här fallet var ingenting avrundat, eftersom jag angav det exakta antalet decimaler som jag angav.

Lägga till bråkdelar

Det finns inget som hindrar dig från att ange fler bråkdelar av sekunder än i det ursprungliga numret.

SELECT 
  round(13.45, 3) AS "13.45",
  round(13.44, 3) AS "13.44"; 

Resultat:

13.45 | 13.44--------+--------13.450 | 13.440

I det här fallet lägger den helt enkelt till en nolla till den högra delen av bråksekunderna.

Här är ett exempel på hur du anger ett antal decimaler när det ursprungliga talet inte inkluderar några bråkdelar.

SELECT round(12, 3); 

Resultat:

12 000

Negativa decimaler

Här är vad som händer när det andra argumentet är ett negativt värde.

SELECT round(789, -2); 

Resultat:

800

Här är några fler.

SELECT 
  round(789, -2),
  round(789, -1),
  round(489, -2),
  round(489, -1),
  round(489, -3); 

Resultat:

runda | runda | runda | runda | rund-------+-------+-------+-------+--------800 | 790 | 500 | 490 | 0

Round() vs Trunc()

I vissa fall används round() funktionen kan tyckas fungera på liknande sätt som trunc() . Men de är ganska olika.

round() funktion rundar talet. Talet avrundas till närmaste heltal eller till det angivna antalet decimaler (beroende på om du ger det ett argument eller två argument).

trunc() funktion å andra sidan trunkerar helt enkelt talet mot noll eller till den angivna decimalen. Ingen avrundning utförs.

Här är ett exempel för att visa skillnaden.

SELECT 
  round(1.49, 1),
  trunc(1.49, 1); 

Resultat:

omgång | trunc-------+-------1,5 | 1.4
  1. PostgreSQL jokertecken LIKE för något av en lista med ord

  2. MySQL:hur man får skillnaden mellan två tidsstämplar på sekunder

  3. Hur man formaterar tal med ledande nollor i SQLite

  4. 12c Flytta datafiler online