暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 使用教程 / SQL语言 / 数据类型6

tocata 2024-08-16
69

货币类型

money 类型存储固定小数精度的货币数字。小数的精度由数据库的 lc_monetary 设置决定。表中展示的范围假设有两个小数位。可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式,如'$1,000.00'。 输出通常是最后一种形式,但和区域相关。

货币类型

名字存储尺寸描述范围
money8 bytes货币额-92233720368547758.08 到 +92233720368547758.07

由于这种数据类型的输出是区域敏感的,因此将 money 数据装入到一个具有不同 lc_monetary 设置的数据库是不起作用的。为了避免这种问题,在恢复一个转储到一个新数据库中之前,应确保新数据库的 lc_monetary 设置和被转储数据库的相同或者具有等效值。

数据类型 numericint 和 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(即一个纯数字,而不是金额),在除法中货币单位被约掉了。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论