8.2. ÐенежнÑе ÑÐ¸Ð¿Ñ #
Тип money Ñ
ÑÐ°Ð½Ð¸Ñ Ð´ÐµÐ½ÐµÐ¶Ð½ÑÑ ÑÑÐ¼Ð¼Ñ Ñ ÑикÑиÑованной дÑобной ÑаÑÑÑÑ; Ñм. ТаблиÑÑ 8.3. ТоÑноÑÑÑ Ð´Ñобной ÑаÑÑи опÑеделÑеÑÑÑ Ð½Ð° ÑÑовне Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
паÑамеÑÑом lc_monetary. ÐÐ»Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°, показанного в ÑаблиÑе, пÑедполагаеÑÑÑ, ÑÑо ÑиÑло ÑодеÑÐ¶Ð¸Ñ Ð´Ð²Ð° знака поÑле запÑÑой. ÐÑ
однÑе даннÑе могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð¿Ð¾-ÑазномÑ, в Ñом ÑиÑле в виде ÑелÑÑ
и дÑобнÑÑ
ÑиÑел, а Ñакже в виде ÑÑÑоки в денежном ÑоÑмаÑе, напÑÐ¸Ð¼ÐµÑ '$1,000.00'. ÐÑводÑÑÑÑ ÑÑи знаÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно в денежном ÑоÑмаÑе, завиÑÑÑем Ð¾Ñ ÑегионалÑнÑÑ
ÑÑандаÑÑов.
ТаблиÑа 8.3. ÐенежнÑе ÑипÑ
| ÐÐ¼Ñ | Ð Ð°Ð·Ð¼ÐµÑ | ÐпиÑание | Ðиапазон |
|---|---|---|---|
money | 8 Ð±Ð°Ð¹Ñ | Ð´ÐµÐ½ÐµÐ¶Ð½Ð°Ñ ÑÑмма | -92233720368547â758.08 .. +92233720368547â758.07 |
Так как вÑводимÑе знаÑÐµÐ½Ð¸Ñ ÑÑого Ñипа завиÑÑÑ Ð¾Ñ ÑегионалÑнÑÑ
ÑÑандаÑÑов, попÑÑка загÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе Ñипа money в Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñ Ð´ÑÑгим паÑамеÑÑом lc_monetary Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑдаÑной. Ðо избежание подобнÑÑ
пÑоблем, пÑежде Ñем воÑÑÑанавливаÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð² новÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑбедиÑеÑÑ Ð² Ñом, ÑÑо паÑамеÑÑ lc_monetary в ÑÑой базе даннÑÑ
Ð¸Ð¼ÐµÐµÑ Ñо же знаÑение, ÑÑо и в иÑÑ
одной.
ÐнаÑÐµÐ½Ð¸Ñ Ñипов numeric, int и bigint можно пÑивеÑÑи к ÑÐ¸Ð¿Ñ money. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипов real и double precision Ñак же Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ ÑеÑез Ñип numeric, напÑимеÑ:
SELECT '12.34'::float8::numeric::money;
Ðднако иÑполÑзоваÑÑ ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой Ð´Ð»Ñ Ð´ÐµÐ½ÐµÐ¶Ð½ÑÑ ÑÑмм не ÑекомендÑеÑÑÑ Ð¸Ð·-за возможнÑÑ Ð¾Ñибок окÑÑглениÑ.
ÐнаÑение money можно пÑивеÑÑи к ÑÐ¸Ð¿Ñ numeric без поÑеÑи ÑоÑноÑÑи. ÐÑеобÑазование в дÑÑгие ÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑоÑнÑм и Ñакже должно вÑполнÑÑÑÑÑ Ð² два ÑÑапа:
SELECT '52093.89'::money::numeric::float8;
ÐÑи делении знаÑÐµÐ½Ð¸Ñ Ñипа money на Ñелое ÑиÑло вÑполнÑеÑÑÑ Ð¾ÑбÑаÑÑвание дÑобной ÑаÑÑи и полÑÑаеÑÑÑ Ñелое, ближайÑее к нÑлÑ. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑезÑлÑÑÐ°Ñ Ñ Ð¾ÐºÑÑглением, вÑполниÑе деление знаÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой или пÑиведиÑе знаÑение Ñипа money к numeric до делениÑ, а заÑем пÑиведиÑе ÑезÑлÑÑÐ°Ñ Ðº ÑÐ¸Ð¿Ñ money. (ÐоÑледний ваÑÐ¸Ð°Ð½Ñ Ð¿ÑедпоÑÑиÑелÑнее, Ñак как иÑклÑÑÐ°ÐµÑ ÑиÑк поÑеÑи ÑоÑноÑÑи.) Ðогда знаÑение money делиÑÑÑ Ð½Ð° дÑÑгое знаÑение money, ÑезÑлÑÑаÑом бÑÐ´ÐµÑ Ð·Ð½Ð°Ñение Ñипа double precision (Ñо еÑÑÑ Ð¿ÑоÑÑо ÑиÑло, не Ð´ÐµÐ½ÐµÐ¶Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñина); денежнÑе единиÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð¿Ñи делении ÑокÑаÑаÑÑÑÑ.