![](/img/trans.png)
[英]Is there a built in function in sql2000 that returns 0 or 0.00 if money or a float column is null?
[英]SQL SERVER Money multiplies with Float returns float result
在阅读了大多数文章之后,我的理解是,如果我们对MONEY设置多个数字字段,它将返回Money。
如果我的字段是INT,则可以正常工作。
ISNULL(POFTotal.Total * [Price],0) AS [Total Purchases PO ($)]
在上面的POF中,Total是INT,Price是货币。 它在我的.Net应用程序中以Currency(Decimal)返回结果。 但对于下面的NFFTotal.Total为float的情况,它在我的.Net应用程序中以float或double的形式返回结果。
ISNULL(NFFTotal.Total * [Price],0) AS [Total NY COGS ($)]
我可以将其转换为下面的代码,但想了解为什么INT和FLOAT之间的区别。
CONVERT(money,ISNULL(NFFTotal.Total * [Price],0)) AS [Total NY COGS ($)]
实际上,在相当多的语言中1 ,实际上不允许您混合提供给操作员的数据类型。 发生这种情况的是,这些语言将定义数据类型优先级规则,并使用这些规则来确定执行计算的“最佳”类型。 然后它将较低优先级的类型转换为较高优先级的类型,然后执行计算。
因此,如果我们查看SQL Server的优先级规则 ,则会发现float
的优先级高于money
优先级,而money
优先级高于int
优先级。 因此,当在表达式中混合int
和money
时,会得到money
类型的结果;为什么在表达式中混合float
和money
时会得到float
。
在阅读了大多数文章之后,我的理解是,如果我们对MONEY设置多个数字字段,它将返回Money。
好吧,我不知道您阅读了哪些文章,但是我说它们充其量是不可靠的。
1这个答案首先说“大多数语言”,但后来我意识到这是一个过时的评论。 在现代语言中,尤其是允许自定义运算符并允许运算符重载的语言,不一定是这种情况。 但是没有人会指责T-SQL是一种现代语言。
MONEY和INT是定点数据类型,而FLOAT是浮点数据类型。
money -922,337,203,685,477.5808 to 922,337,203,685,477.5807 8 bytes
smallmoney -214,748.3648 to 214,748.3647 4 bytes
所以如果你用
NFFTotal.Total * [Price]
结果是浮点类型,您需要转换才能使其与MONEY一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.