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

sql*_*ild 3 sql types sql-server-2005

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

Mar*_*ith 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))
Run Code Online (Sandbox Code Playgroud)

你看到存储是一样的.

------------------ ------------------
0x0000000000003039 0x0000000000003039
Run Code Online (Sandbox Code Playgroud)

行为

但是,money数据类型的行为并不像您bigint自己使用的那样.money 应避免计算,但它们仍然比类似的整数除法更精确.

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*/
Run Code Online (Sandbox Code Playgroud)