Ayrıca döküm için eski sözdizimini deneyin,
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
PostgreSQL'in herhangi bir sürümü ile çalışır.
Bazı PostgreSQL fonksiyonlarında aşırı yüklenme eksikliği var , neden (???): Bence "bir eksikliktir" (!), Ancak @CraigRinger, @Catcall ve PostgreSQL ekibi "pg'nin tarihi mantığı" konusunda hemfikir.
Not: Yuvarlama ile ilgili bir başka nokta doğruluktur , @ IanKenney'in cevabını kontrol edin .
Döküm stratejisi olarak aşırı yükleme
YUVARLA işlevini aşırı yükleyebilirsiniz ,
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
Şimdi talimatınız iyi çalışır, deneyin (işlev oluşturulduktan sonra)
SELECT round(1/3.,4); -- 0.3333 numeric
ancak bir NUMERIC türü döndürür ... İlk commom kullanım aşırı yüklenmesini korumak için, bir TEXT parametresi sunulduğunda bir FLOAT türü döndürebiliriz,
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... complete!
ELSE 'NaN'::float -- like an error message
END;
$$ language SQL IMMUTABLE;
Deneyin
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
Not: \df round
Aşırı yüklemelerden sonra kontrol etmek ,
Şeması | İsim | Sonuç veri türü | Bağımsız değişken veri türleri
------------ + ------- + ------------------ + ---------- ------------------
myschema | yuvarlak | çift kesinlik | çift kesinlik, metin, int
myschema | yuvarlak | sayısal | çift kesinlik, int
pg_catalog | yuvarlak | çift kesinlik | çift hassasiyet
pg_catalog | yuvarlak | sayısal | sayısal
pg_catalog | yuvarlak | sayısal | sayısal, int
pg_catalog
Fonksiyonlar, varsayılan olanlardır bkz kurarak küçük bir matematik fonksiyonlarının manuel .