打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL SERVER 数值类型的存储格式及转换 - misterliwei的专栏 - CS...

  SQL SERVER 数值类型的存储格式及转换 收藏

SQL SERVER 数值类型的存储格式及转换



一.    整数
整数类型有四种:BigInt、Int、SmallInt和Tinyint,分别占用空间为8、4、2、1个字节。整数类型的存储格式比较简单:数据的补码形式。这个大家比较熟悉。

二.    Decimal/Numeric
这两个数据类型定义格式:decimal[(p[, s])] 和 numeric[(p[, s])]
p(精度)
指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为38。
s(小数位数)
指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。
精度与存储字节之间的关系:


那么SQL SERVER是如何存储Decimal/Numeric数据的呢?

首先右移小数点s位(不管小数点后面是否为0),使得数据成为整数(这是该类型数据成为精确类型的基础)。SQL SERVER对结果值专门使用一个字节记录正负:0x00表示负;0x01表示正。结果的绝对值(没有符号部分)存储于符号值其后。
以上部分(符号位和结果值)构成了Decimal/Numeric类型数据的长度,也就是上表中占用的字节数。其实在SQL SERVER内部,另外还得需要3个字节:1个字节记录精度;1个字节记录小数位数;另有1字节为0。

所有最终的存储格式如下:

三.    Money和 Smallmoney
货币类型有两种:Money和SmallMoney,分别占用8个和4个字节。货币类型固定有4位的小数位。
货币类型和Decimal/Numeric类型的存储格式有相似处也有不同处。
相似的地方是:SQL SERVER会将货币类型小数点右移4位(相当于乘以10000),这样就成整数了。
不同的地方是,由于货币类型的小数位数固定为4,所有没有必要记录精度值和小数位数了。同时货币类型也没有专门的符号位,SQL SERVER直接将小数点右移后的值按补码存储。

给货币类型赋值时,不需要用单引号 (') 引起来。请务必记住虽然您可以指定前面带有货币符号的货币值,但 SQL Server 不存储任何与符号关联的货币信息,它只存储数值。


四.    浮点数Float和real
Float类型定义格式:float [ ( n ) ]。 n 为用于存储科学记数法 float 数尾数的位数,同时指示其精度和存储大小。n 必须为从 1 到 53 之间的值。
   精度与存储字节之间的关系:

在 SQL Server 中,real 的同义词为 float(24)。
由于浮点数存储的数据的近似值,所以如果不是要保存特别大的数据,建议使用精确类型值。浮点数的存储格式请看博文

五.    使用CONVERT将数值类型转换为字符型
1.    下表显示了从 float 或 real 转换为字符数据时的 style 值。

2.    在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。

3.    若目的字符串太短,则会产生下面的错误:




六.    参考文献

1.    MSDN

发表于 @ 2010年04月12日 17:40:00 | 评论( 1) | 编辑| 举报| 收藏

旧一篇:浮点数在计算机中的表示 | 新一篇:保护模式、实地址模式及V8086模式下的指令格式(上)

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
decimal(numeric )、float 和 real 数据类型的区别[转]
请问:decimal和numeric的区别是什么?
浮点数在计算机中的表示
SQL中的real、float、decimal、numeric数据类型区别
Sql Server基础:数据类型详解
小数在内存中究竟是如何存储的(C语言代码详细讲解 1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服