Quelle est la différence entre le type de données money et bigint dans sql server ?
Réponses
Trop de publicités?Gamme/Précision
bigint
La gamme est -9,223,372,036,854,775,808
a 9,223,372,036,854,775,807
money
La gamme est -922,337,203,685,477.5808
a 922,337,203,685,477.5807
Stockage
Ils prennent tous deux 8 octets de stockage et sont stockés comme de grands nombres entiers. La seule différence est que SQL Server comprend que les 4 chiffres les plus à droite sont après le point décimal.
Si vous le faites
declare @m money = 1.2345
declare @b bigint = 12345
select cast(@m as BINARY(8)), cast(@b as BINARY(8))
Vous voyez, le stockage est le même.
------------------ ------------------
0x0000000000003039 0x0000000000003039
Comportement
Toutefois, le money
ne se comporte pas exactement comme si vous utilisiez simplement un type de données bigint
vous-même. Calculs avec money
sont à éviter mais elles sont toujours plus précises que la division analogique d'un nombre entier.
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*/