重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 85|回复: 0
打印 上一主题 下一主题

SQLSERVER 有 numeric ,为什么还要有 money 类型

[复制链接]
跳转到指定楼层
楼主
发表于 2026-3-24 16:24:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
明明有 DECIMAL / NUMERIC 这种高精度数值类型,为什么还要专门设计一个 money 类型?



一句话结论
money 不是为了 “精度更高”,而是为了货币场景专用、自带格式、自带四舍五入规则、自带货币语义,在财务场景里比 numeric 更省事、更安全。



1. 最核心区别:语义不同
  • numeric / decimal:通用高精度数字,没有任何业务含义,可以存重量、长度、分数、科学计数。
  • money:专门存钱,数据库知道这是货币,会自动按货币规则处理。

2. money 自带固定小数位,不会乱
货币永远是 固定 2 位小数(不同数据库略有差异):

  • SQL Server:money = 10000 进制(小数点后 4 位)
  • PostgreSQL:money = 小数点后 2 位

好处:

  • 不会出现 100.1234567 这种非法金额
  • 不会因为小数位数混乱导致对账错误

而 numeric(19,4) 虽然也能做到,但需要你手动定义精度,一不小心就错。

3. money 自带货币格式化
直接查询就能输出:

$1,234.56



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 10:57 , Processed in 0.218672 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表