首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server:算术运算中的数据类型"rank“?

SQL Server:算术运算中的数据类型"rank“?
EN

Stack Overflow用户
提问于 2011-04-08 02:29:18
回答 2查看 1.3K关注 0票数 1

当两个不同数据类型的值放在一起进行算术运算时,SQL Server会自动将值转换为特定的数据类型。例如。

代码语言:javascript
运行
复制
DECLARE @d NUMERIC(9,6);
SET @d = 1.0;
SELECT @d/3;
GO

结果0.33333333。这种转换背后的内部逻辑是什么?数据类型之间是否存在某种“等级”(转换将发生在哪个“方向”)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-08 02:34:15

请参阅: msdn.microsoft.com上的Data Type Precedence (for SQL-Server 2000)

来自与SQL-Server 2008相同的页面

当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定将优先级较低的数据类型转换为优先级较高的数据类型。

如果转换不是a支持的隐式转换,则返回错误。当两个操作数表达式具有相同的数据类型时,操作的结果将具有该数据类型。

SQL Server对数据类型使用以下优先顺序:

  1. user-defined数据类型(highest)
  2. sql_variant
  3. xml
  4. datetimeoffset
  5. datetime2
  6. datetime
  7. smalldatetime
  8. date
  9. time
  10. float
  11. real
  12. decimal
  13. money
  14. smallmoney
  15. bigint
  16. int
  17. smallint
  18. tinyint
  19. bit
  20. ntext
  21. text
  22. image
  23. timestamp
  24. uniqueidentifier
  25. nvarchar (包括nvarchar(最大) )
  26. nchar
  27. varchar (包括varchar(max) )
  28. char
  29. varbinary (包括varbinary(max) ) (lowest)

  • binary(lowest)

有关何时两个操作数都是char、varchar、binary或varbinary表达式,以及何时它们都是具有不同精度或小数位数的小数位数,以及何时它们都是具有不同精度或小数位数的小数位数,请参阅:Precision, Scale, and Length

下面的SO问题/答案也是相关的:sql-server-truncates-decimal-points-of-a-newly-created-field-in-a-view

票数 4
EN

Stack Overflow用户

发布于 2011-04-08 02:34:59

由于分子和分母都是整数,因此结果将是整数。您需要将两个值中的一个转换为十进制值:

代码语言:javascript
运行
复制
Select @i / 3.0

Data Type Conversion (Database Engine)

CAST and CONVERT (Transact-SQL)

具体地说,请注意有关隐式数据类型转换的部分。在您的示例中,由于所有类型都属于同一类型,因此不存在转换。尽管Cast/Convert文章介绍了这些函数,但它也概述了隐式转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5585796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档