Postgresql支持货币(money)类型,在内存中占用8 位空间,表示范围-92233720368547758.08 to +92233720368547758.07,有别于变精度浮点类型real 和 double precision,和numeric有些相似,都可以保证精度,区别在于货币类型会截取小数点后数据,有输出格式,输出格式受到lc_monetary设置影响。
#查看Linux系统lc_monetary postgres=# show lc_monetary; lc_monetary ------------- zh_CN.UTF-8 (1 行记录) #查看Windows系统lc_monetary,数据库版本10.0 test=# show lc_monetary; lc_monetary ----------------------------------------------------- Chinese (Simplified)_People's Republic of China.936 (1 行记录) test=# ---执行一个简单查询,提示:数据被截取显示 postgres=# select '111.333333'::money; money ---------- ¥111.33 (1 行记录)
查看lc_monetary可支持设置类型。切换lc_monetary值不同查看结果。Postgresql默认值为C,支持本地化。
minmin@debian:~$ locale -a C C.UTF-8 POSIX zh_CN.utf8 minmin@debian:~$ ---切换至默认值 postgres=# set lc_monetary='C'; SET postgres=# postgres=# postgres=# set lc_monetary='POSIX'; SET postgres=# postgres=# select '100.777'::money; money --------- $100.78 (1 行记录) postgres=#
切换至POSIX以后,货币显示格式发生变化。
postgres=# set lc_monetary='C'; SET postgres=# select '100.777'::money; money --------- $100.78 (1 行记录) postgres=# set lc_monetary='zh_CN.utf8'; SET postgres=# select '100.777'::money; money ---------- ¥100.78 (1 行记录) postgres=#
注意:money不包含币种信息,严格来讲不算货币数据类型,实际使用过程中还存在诸多不便,因此有人推荐使用decimal(numeric)数据类型。
原文地址:https://www.jb51.cc/postgresql/193433.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。