PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zaokrąglić średnią do 2 miejsc po przecinku w PostgreSQL?

PostgreSQL nie definiuje round(double precision, integer) . Z powodów @Mike Sherrill „Przypomnij sobie kota” wyjaśnia w komentarzach, że wersja round, która przyjmuje precyzję, jest dostępna tylko dla numeric .

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)

(Powyżej zauważ, że float8 to tylko skrótowy alias dla double precision . Możesz zobaczyć, że PostgreSQL rozszerza go w danych wyjściowych).

Musisz rzutować zaokrągloną wartość do numeric użyć dwuargumentowej formy round . Wystarczy dołączyć ::numeric dla skróconego rzutowania, np. round(val::numeric,2) .

Jeśli formatujesz do wyświetlania użytkownikowi, nie używaj round . Użyj to_char (patrz:funkcje formatowania typu danych w podręczniku), który pozwala określić format i daje text wynik, na który nie ma wpływu żadne dziwactwo, które Twój język klienta może zrobić z numeric wartości. Na przykład:

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

to_char zaokrągli liczby w ramach formatowania. FM prefiks mówi to_char że nie chcesz żadnego wypełnienia z wiodącymi spacjami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Testuj funkcję zerową przy różnych parametrach

  2. Porównaj tablice pod kątem równości, ignorując kolejność elementów

  3. Przechowywanie strefy czasowej w znaczniku czasu typu danych ze strefą czasową

  4. Replikacja strumieniowa PostgreSQL a replikacja logiczna

  5. Nowe funkcje zgodności z Oracle w PostgresPlus Advanced Server 9.3Beta