कोशिश करें
SELECT round((1/3.)::numeric,4);
PostgreSQL के किसी भी संस्करण के साथ काम करता है।
कुछ PostgreSQL फ़ंक्शंस में ओवरलोड की कमी है, क्यों (???):मुझे लगता है कि "यह एक कमी है", और नीचे मेरा वर्कअराउंड दिखाएं, लेकिन देखें अधिक स्पष्टीकरण के लिए यह चर्चा ।
कास्टिंग रणनीति के रूप में ओवरलोडिंग
आप ओवरलोड कर सकते हैं के साथ राउंड फ़ंक्शन,
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 देता है... पहले कमॉम-उपयोग अधिभार को संरक्षित करने के लिए, जब कोई टेक्स्ट पैरामीटर पेश किया जाता है तो हम एक फ्लोट वापस कर सकते हैं,
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;
कोशिश करें
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
पुनश्च:आप \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
pg_catalog फ़ंक्शन डिफ़ॉल्ट हैं, बिल्ड-इन गणित का मैनुअल देखें कार्य ।