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

PostgreSQL - zaokrouhlování čísel s pohyblivou řádovou čárkou

Zkuste

SELECT round((1/3.)::numeric,4);

funguje s jakoukoli verzí PostgreSQL.

V některých funkcích PostgreSQL je nedostatek přetížení, proč (???):Myslím, že "to je nedostatek" a níže ukažte moje řešení, ale viz tato diskuse pro další vysvětlení .

Přetížení jako strategie casting

Můžete přetížit funkci ROUND pomocí,

 CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
    SELECT ROUND($1::numeric,$2);
 $$ language SQL IMMUTABLE;

Nyní bude vaše instrukce fungovat dobře, zkuste (po vytvoření funkce)

 SELECT round(1/3.,4); -- 0.3333 numeric

ale vrací typ NUMERIC... Abychom zachovali první přetížení běžného používání, můžeme vrátit float, když je nabídnut textový parametr,

 CREATE FUNCTION ROUND(float, text, int DEFAULT 0) 
 RETURNS FLOAT AS $$
    SELECT CASE WHEN $2='dec'
                THEN ROUND($1::numeric,$3)::float
                -- ... WHEN $2='hex' THEN ... WHEN $2='bin' THEN... 
                ELSE 'NaN'::float  -- is like a error message 
            END;
 $$ language SQL IMMUTABLE;

Zkuste

 SELECT round(1/3.,'dec',4);   -- 0.3333 float!
 SELECT round(2.8+1/3.,'dec',1); -- 3.1 float!
 SELECT round(2.8+1/3.,'dec'::text); -- need to cast string? pg bug 

PS:Přetížení můžete zkontrolovat pomocí \df,

 \df round
  Schema    | Name  | Datatype of result        |    Datatype of parameters                       
 -----------+-------+---------------------------+--------------------------------
 myschema   | round | numeric                   | double precision, integer                                     
 myschema   | round | double precision          | double precision, text, integer
 pg_catalog | round | double precision          | double precision                                              
 pg_catalog | round | numeric                   | numeric                                                       
 pg_catalog | round | numeric                   | numeric, integer                                              

Funkce pg_catalog jsou výchozí, viz manuál pro vestavěnou matematiku funkce .



  1. Jak zobrazím skryté znaky pole ve výsledku dotazu v Oracle?

  2. Dotaz MySQL získá hodnotu čárkou oddělenou od hlavní tabulky podrobností

  3. SQL:odstraňte všechna data ze všech dostupných tabulek

  4. jak vytvořit schéma mysql v nodejs