↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 数据类型 / 数值

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. 货币类型

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 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。

oid
790
descr
monetary amounts, $d,ddd.cc
typacl
_null_
typlen
8
typelem
0
typname
money
typsend
cash_send
typtype
b
typalign
d
typarray
0
typbyval
FLOAT8PASSBYVAL
typdelim
','
typinput
cash_in
typmodin
-
typndims
0
typowner
POSTGRES
typrelid
0
typmodout
-
typoutput
cash_out
typtypmod
-1
typanalyze
-
typdefault
_null_
typnotnull
f
typreceive
cash_recv
typstorage
p
typbasetype
0
typcategory
N
typcollation
0
typisdefined
t
typnamespace
pg_catalog
typsubscript
-
typdefaultbin
_null_
array_type_oid
791
typispreferred
f
array_type_name
_money

类型转换 4

与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。

源类型目标类型转换上下文转换方式函数
moneynumeric赋值函数numeric(money)
numericmoney赋值函数money(numeric)
int4money赋值函数money(int4)
int8money赋值函数money(int8)

运算符重载 24

每种操作数签名均为独立重载。实现函数和返回类型来自同一源码构建。

运算符左操作数右操作数返回类型含义实现函数
*moneyfloat4money相乘cash_mul_flt4
/moneyfloat4money相除cash_div_flt4
*float4moneymoney相乘flt4_mul_cash
=moneymoneybool等于cash_eq
<>moneymoneybool不等于cash_ne
<moneymoneybool小于cash_lt
>moneymoneybool大于cash_gt
<=moneymoneybool小于等于cash_le
>=moneymoneybool大于等于cash_ge
+moneymoneymoney相加cash_pl
-moneymoneymoney相减cash_mi
*moneyfloat8money相乘cash_mul_flt8
/moneyfloat8money相除cash_div_flt8
*moneyint8money相乘cash_mul_int8
/moneyint8money相除cash_div_int8
*moneyint4money相乘cash_mul_int4
/moneyint4money相除cash_div_int4
*moneyint2money相乘cash_mul_int2
/moneyint2money相除cash_div_int2
*float8moneymoney相乘flt8_mul_cash
*int8moneymoney相乘int8_mul_cash
*int4moneymoney相乘int4_mul_cash
*int2moneymoney相乘int2_mul_cash
/moneymoneyfloat8相除cash_div_cash

操作符类 1

声明输入类型与此类型相符的操作符类。多态操作符类、类型转换和表达式索引还可能提供其他索引路径;不能仅凭此表判断是否支持索引。

操作符类索引方法输入类型操作符族默认存储类型
money_opsbtreemoneybtree/money_ops是与输入类型相同

版本比较

PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。

这两个样本的系统目录和结构化属性没有变化。

这些构建的文档也有差异,请查看对应版本的手册定义。

文档与源码

构建
18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

相关条目

全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。