money
货币额
当前查看 PostgreSQL 18.6。
PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。
定义
货币额
money
- 目录名称
- pg_catalog.money
- 类型 OID
- 790
- 类型种类
- 基础类型
- 声明长度
- 8 字节
- 存储策略
- plain
- 输入函数
- cash_in
- 输出函数
- cash_out
- 手册中的声明
- money
- 存储大小
- 8 字节
- 手册说明
- 货币额
- 范围
- -92233720368547758.08 到 +92233720368547758.07
中文手册
阅读来源定义
8.2. 货币类型
8.2. 货币类型
money 类型以固定的小数精度存储货币金额;参见表 8.3。小数精度由数据库的lc_monetary设置决定。表中显示的范围假定有两位小数。输入支持多种格式,包括整数字面量和浮点数字面量,以及典型的货币格式,例如 '$1,000.00'。输出通常也采用后一种形式,但会受到区域设置影响。
表 8.3. 货币类型
| 名字 | 存储大小 | 说明 | 范围 |
|---|---|---|---|
money |
8 字节 | 货币额 | -92233720368547758.08 到 +92233720368547758.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(即一个纯数字,而不是金额),因为在除法中货币单位被约掉了。
系统目录属性
此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。
oid790descrmonetary amounts, $d,ddd.cctypacl_null_typlen8typelem0typnamemoneytypsendcash_sendtyptypebtypaligndtyparray0typbyvalFLOAT8PASSBYVALtypdelim','typinputcash_intypmodin-typndims0typownerPOSTGREStyprelid0typmodout-typoutputcash_outtyptypmod-1typanalyze-typdefault_null_typnotnullftypreceivecash_recvtypstorageptypbasetype0typcategoryNtypcollation0typisdefinedttypnamespacepg_catalogtypsubscript-typdefaultbin_null_array_type_oid791typispreferredfarray_type_name_money
类型转换 4
与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。
运算符重载 24
每种操作数签名均为独立重载。实现函数和返回类型来自同一源码构建。
| 运算符 | 左操作数 | 右操作数 | 返回类型 | 含义 | 实现函数 |
|---|---|---|---|---|---|
* | money | float4 | money | 相乘 | cash_mul_flt4 |
/ | money | float4 | money | 相除 | cash_div_flt4 |
* | float4 | money | money | 相乘 | flt4_mul_cash |
= | money | money | bool | 等于 | cash_eq |
<> | money | money | bool | 不等于 | cash_ne |
< | money | money | bool | 小于 | cash_lt |
> | money | money | bool | 大于 | cash_gt |
<= | money | money | bool | 小于等于 | cash_le |
>= | money | money | bool | 大于等于 | cash_ge |
+ | money | money | money | 相加 | cash_pl |
- | money | money | money | 相减 | cash_mi |
* | money | float8 | money | 相乘 | cash_mul_flt8 |
/ | money | float8 | money | 相除 | cash_div_flt8 |
* | money | int8 | money | 相乘 | cash_mul_int8 |
/ | money | int8 | money | 相除 | cash_div_int8 |
* | money | int4 | money | 相乘 | cash_mul_int4 |
/ | money | int4 | money | 相除 | cash_div_int4 |
* | money | int2 | money | 相乘 | cash_mul_int2 |
/ | money | int2 | money | 相除 | cash_div_int2 |
* | float8 | money | money | 相乘 | flt8_mul_cash |
* | int8 | money | money | 相乘 | int8_mul_cash |
* | int4 | money | money | 相乘 | int4_mul_cash |
* | int2 | money | money | 相乘 | int2_mul_cash |
/ | money | money | float8 | 相除 | cash_div_cash |
操作符类 1
声明输入类型与此类型相符的操作符类。多态操作符类、类型转换和表达式索引还可能提供其他索引路径;不能仅凭此表判断是否支持索引。
版本比较
PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。
这两个样本的系统目录和结构化属性没有变化。
这些构建的文档也有差异,请查看对应版本的手册定义。
文档与源码
- 构建
- 18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
- 指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
相关条目
全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。