PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie rundet man in PostgreSQL einen Durchschnitt auf 2 Dezimalstellen?

PostgreSQL definiert round(double precision, integer) nicht . Aus Gründen @Mike Sherrill 'Cat Recall' erklärt in den Kommentaren, dass die Version von round, die eine Genauigkeit benötigt, nur für numeric verfügbar ist .

regress=> SELECT round( float8 '3.1415927', 2 );
ERROR:  function round(double precision, integer) does not exist

regress=> \df *round*
                           List of functions
   Schema   |  Name  | Result data type | Argument data types |  Type  
------------+--------+------------------+---------------------+--------
 pg_catalog | dround | double precision | double precision    | normal
 pg_catalog | round  | double precision | double precision    | normal
 pg_catalog | round  | numeric          | numeric             | normal
 pg_catalog | round  | numeric          | numeric, integer    | normal
(4 rows)

regress=> SELECT round( CAST(float8 '3.1415927' as numeric), 2);
 round 
-------
  3.14
(1 row)

(Beachten Sie oben, dass float8 ist nur ein abgekürzter Alias ​​für double precision . Sie können sehen, dass PostgreSQL es in der Ausgabe erweitert).

Sie müssen den zu rundenden Wert in numeric umwandeln um die Zwei-Argumente-Form von round zu verwenden . Hängen Sie einfach ::numeric an für die Kurzform, wie round(val::numeric,2) .

Wenn Sie für die Anzeige für den Benutzer formatieren, verwenden Sie nicht round . Verwenden Sie to_char (siehe:Formatierungsfunktionen für Datentypen im Handbuch), mit dem Sie ein Format angeben können und einen text erhalten Ergebnis, das nicht von der Verrücktheit Ihrer Client-Sprache mit numeric beeinflusst wird Werte. Zum Beispiel:

regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
    to_char    
---------------
 3.14
(1 row)

to_char rundet Zahlen als Teil der Formatierung für Sie. Der FM prefix sagt to_char dass Sie keine Auffüllung mit führenden Leerzeichen wünschen.