sql >> Databáze >  >> RDS >> PostgreSQL

Jak zaokrouhlit průměr na 2 desetinná místa v PostgreSQL?

PostgreSQL nedefinuje round(double precision, integer) . Z důvodů @Mike Sherrill 'Cat Recall' vysvětluje v komentářích, verze kola, která vyžaduje přesnost, je dostupná pouze pro 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)

(Ve výše uvedeném platí, že float8 je jen zkrácený alias pro double precision . Ve výstupu můžete vidět, že PostgreSQL jej rozšiřuje).

Aby byla hodnota zaokrouhlena na numeric, musíte přetypovat použít formu se dvěma argumenty round . Stačí připojit ::numeric pro těsnopisné obsazení, například round(val::numeric,2) .

Pokud formátujete pro zobrazení uživateli, nepoužívejte round . Použijte to_char (viz:funkce formátování datových typů v příručce), která vám umožní určit formát a poskytne vám text výsledek, který není ovlivněn jakýmikoli podivnostmi, které by váš klientský jazyk mohl udělat s numeric hodnoty. Například:

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

to_char zaokrouhlí čísla za vás v rámci formátování. FM prefix říká to_char že nechcete žádnou výplň s úvodními mezerami.



  1. Jak mohu pracovat s vysoce přesnými desetinnými místy v PHP

  2. Funkce SIN() v Oracle

  3. Oprava:„operátor neexistuje:celé číslo || celé číslo“ v PostgreSQL

  4. Oracle PLS-00363:výraz '' nelze použít jako cíl přiřazení