关于money类型的讨论

唐诗三百首 2016-03-22 12:03:48
加精
请问money类型相当于decimal哪个长度(包括小数长度)的数据类型?
如何证明?
...全文
2099 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjunlong20044 2016-03-26
  • 打赏
  • 举报
回复
看不懂啊 谁能教教我啊 我是一个新的菜鸟
  • 打赏
  • 举报
回复
我用的就是decimal
薛定谔的DBA 2016-03-23
  • 打赏
  • 举报
回复
--要证明,一个个测试:

DECLARE @Money1 money
SET @Money1 = 123456789012345--decimal(17,2)
SELECT @Money1

DECLARE @Money2 money
SET @Money2 = 1234567890123456 --error(整数最长15位)
SELECT @Money2

DECLARE @Money3 money
SET @Money3 = 123456789012345.1234--decimal(19,4)
SELECT @Money3

DECLARE @Money4 money
SET @Money4 = 123456789012345.12345 --decimal(19,4)
SELECT @Money4

DECLARE @Money5 money
SET @Money5 = 0.12345 --decimal(?,4) (小数最长4位)
SELECT @Money5


DECLARE @Money money
SET @Money = 1235.45679
SELECT @Money
,SQL_VARIANT_PROPERTY(@Money,'BaseType') AS BaseType
,SQL_VARIANT_PROPERTY(convert(sql_variant,@Money),'BaseType') AS BaseType
,SQL_VARIANT_PROPERTY(convert(sql_variant,@Money),'Precision') AS Precision
,SQL_VARIANT_PROPERTY(convert(sql_variant,@Money),'Scale') AS Scale

zbdzjx 2016-03-23
  • 打赏
  • 举报
回复
不记得在哪看到的了,好像是说,money类型,是用bigint除以10000来处理的。
Poopaye 2016-03-23
  • 打赏
  • 举报
回复
money的范围是-922,337,203,685,477.5808 to 922,337,203,685,477.5807,8个字节 所以范围比decimal(19,4) 略小一点
Ginnnnnnnn 2016-03-22
  • 打赏
  • 举报
回复
我觉得应该是 decimal (19,4) SELECT * FROM sys.types WHERE name = 'money' name max_length precision scale ------- ---------- --------- ----- money 8 19 4
道素 2016-03-22
  • 打赏
  • 举报
回复
不建议用MONEY,精度不够,下面有个例子:

DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)

    SELECT
    @mon1 = 100, @mon2 = 339, @mon3 = 10000,
    @num1 = 100, @num2 = 339, @num3 = 10000

    SET @mon4 = @mon1/@mon2*@mon3
    SET @num4 = @num1/@num2*@num3

    SELECT @mon4 AS moneyresult,@num4 AS numericresult

moneyresult numeric result 2949.00 2949.8525
jmx123456789 2016-03-22
  • 打赏
  • 举报
回复
人气不行啊现在 这么久也没回多少。
mingqing6364 2016-03-22
  • 打赏
  • 举报
回复
应该是decimal(17,2),红色部分是SQL语句 [/color]

PRINT @@version;
/*
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
	Apr  2 2010 15:48:46 
	Copyright (c) Microsoft Corporation
	Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

受影响的行: 0
时间: 0.018s
*/

PRINT CAST(123456789012345.12345 AS money);
/*
123456789012345.12

受影响的行: 0
时间: 0.007s
*/

PRINT CAST(1234567890123456.12345 AS money)
/*
[Err] 22003 - [SQL Server]将 numeric 转换为数据类型 money 时出现算术溢出错误。
*/
mingqing6364 2016-03-22
  • 打赏
  • 举报
回复
应该是decimal(17,2),code标签里面不能带颜色啊

PRINT @@version;
/*
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
    Apr  2 2010 15:48:46 
    Copyright (c) Microsoft Corporation
    Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
 
受影响的行: 0
时间: 0.018s
*/
 
PRINT CAST(123456789012345.12345 AS money);
/*
123456789012345.12
 
受影响的行: 0
时间: 0.007s
*/
 
PRINT CAST(1234567890123456.12345 AS money)
/*
[Err] 22003 - [SQL Server]将 numeric 转换为数据类型 money 时出现算术溢出错误。
*/
等待时候 2016-03-22
  • 打赏
  • 举报
回复
版主就是任性

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧