ispsh 发表于 2015-7-5 07:35:54

SQL server和C#使用什么类型来记录金额

  今天的一个小讨论,关于SQL server和C#使用什么类型来记录金额。
  
  SQL server里的金额表示
  (1)Money类型
  SQL Server里使用Money和smallmoney类型来表示货币类型,Money是8字节的,smallmoney是4字节的。
  如果一个对象被定义为 money,则它最多可以包含 19 位数字,其中小数点后可以有 4 位数字。该对象使用 8 个字节存储数据。因此,money 数据类型的精度是 19,小数位数是 4,长度是 8。
  数据类型
  范围
  长度
  Money
  -922,337,203,685,477.5808 到 922,337,203,685,477.5807
  8字节
  Smallmoney
  214,748.3648 到 214,748.3647
  4字节
  money 和 smallmoney 限制为小数点后有 4 位。如果需要小数点后有更多位,请使用 decimal 数据类型。
  money 或 smallmoney 常量中不允许使用逗号分隔符。只能在显式转换为 money 或 smallmoney 的字符串中指定逗号分隔符。
  实例代码
USE tempdb;
GO
CREATE TABLE Test (num INT PRIMARY KEY, summary MONEY);
GO
SET NOCOUNT ON;
GO

-- 插入数据到临时表
INSERT INTO Test VALUES (1, $123.45);
GO
INSERT INTO Test VALUES (2, $123123.45);
GO
INSERT INTO Test VALUES (3, CAST('$444,123.45' AS MONEY) );
GO

-- 插入错误示例,分隔符是字符串类型
INSERT INTO TestMoney VALUES (3, $555,123.45);
GO
SET NOCOUNT OFF;
GO
SELECT * FROM Test;
GO
--返回错误信息
--Msg 213, Level 16, State 1, Line 3
  --列名或所提供值的数目与表定义不匹配
  
  (2)Decimal类型
  Decimal是带固定精度和小数位数的数值数据类型
decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )]
固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。
p(精度)
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
s (小数位数)
小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0
页: [1]
查看完整版本: SQL server和C#使用什么类型来记录金额