货币和整数数据类型之间的差异

时间:2011-03-19 13:48:44

标签: sql sql-server-2005 types

sql server中money和bigint数据类型的区别是什么?

2 个答案:

答案 0 :(得分:10)

范围/精度

bigint范围为-9,223,372,036,854,775,8089,223,372,036,854,775,807

money范围为-922,337,203,685,477.5808922,337,203,685,477.5807

存储

它们都占用8个字节的存储空间并存储为大整数,唯一的区别是SQL Server理解4个最右边的数字位于小数点之后。

如果你这样做

declare @m money = 1.2345
declare @b bigint = 12345

select cast(@m as BINARY(8)), cast(@b as BINARY(8))

您看到存储空间相同。

------------------ ------------------
0x0000000000003039 0x0000000000003039

行为

然而,money数据类型的行为与您自己只使用bigint的行为完全不同。使用money are to be avoided进行计算,但它们仍然比类似的整数除法更精确。

declare @m money = 1.9999, @m2 money = 1

select @m/@m2 /*Returns 1.9999*/

declare @b bigint = 19999, @b2 bigint = 10000

select @b/@b2 /*Returns 1*/

答案 1 :(得分:0)

我觉得它非常简单; bigint无法保留小数点,money可以。

实施例

bigint -------------- money

44(正确)------- 44(正确)并将在db 44.0000中保存

4.4(不正确)---- 4.4(正确)并在db 4.4000中保存