ลองใช้ไวยากรณ์เก่าเพื่อการคัดเลือก
SELECT ROUND(AVG(some_column)::numeric,2)
FROM table;
ทำงานร่วมกับ PostgreSQL รุ่นใดก็ได้
มีการขาดเกินพิกัดในบางฟังก์ชันของ PostgreSQL ทำไม (???): ฉันคิดว่า "มันคือการขาด" (!) แต่ @CraigRinger, @Catcall และทีม PostgreSQL เห็นด้วยกับเหตุผลของประวัติศาสตร์ของ pg "
PS: ประเด็นเกี่ยวกับการปัดเศษอีกอย่างก็คือความถูกต้องตรวจสอบ@ คำตอบของ
มากไปเป็นกลยุทธ์การคัดเลือกนักแสดง
คุณสามารถโอเวอร์โหลดฟังก์ชัน ROUND ด้วย
CREATE FUNCTION ROUND(float,int) RETURNS NUMERIC AS $$
SELECT ROUND($1::numeric,$2);
$$ language SQL IMMUTABLE;
ตอนนี้คำสั่งของคุณจะใช้งานได้ดีลอง (หลังจากการสร้างฟังก์ชั่น)
SELECT round(1/3.,4); -- 0.3333 numeric
แต่มันกลับเป็นประเภท NUMERIC ... เพื่อรักษาปริมาณการใช้เกินคอมมิชชันแรกเราสามารถคืนค่าชนิด FLOAT เมื่อมีการเสนอพารามิเตอร์ TEXT
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;
ลอง
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: การตรวจสอบ\df round
หลังจากการบรรทุกเกินพิกัดจะแสดงสิ่งที่ต้องการ
สคีมา ชื่อ | ประเภทข้อมูลผลลัพธ์ | ชนิดข้อมูลอาร์กิวเมนต์
------------ + ------- + + ------------------ ---------- ------------------
myschema ปัดเศษ ความแม่นยำสองเท่า ความแม่นยำสองเท่า, ข้อความ, int
myschema ปัดเศษ ตัวเลข | ความแม่นยำสองเท่า int
pg_catalog | ปัดเศษ ความแม่นยำสองเท่า ความแม่นยำสองเท่า
pg_catalog | ปัดเศษ ตัวเลข | เป็นตัวเลข
pg_catalog | ปัดเศษ ตัวเลข | ตัวเลข, int
pg_catalog
ฟังก์ชั่นเป็นคนที่เริ่มต้นดูคู่มือของการสร้างฟังก์ชั่นทางคณิตศาสตร์