Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在不同的SQL服务器上将日期时间强制转换为十进制时的差异_Sql Server_Tsql_Datetime_Decimal_Rounding - Fatal编程技术网

Sql server 在不同的SQL服务器上将日期时间强制转换为十进制时的差异

Sql server 在不同的SQL服务器上将日期时间强制转换为十进制时的差异,sql-server,tsql,datetime,decimal,rounding,Sql Server,Tsql,Datetime,Decimal,Rounding,在两个不同的sql Server上,我运行以下查询: declare @myDatetime as datetime = '2017-07-04 23:42:32.400' select CAST(@myDatetime AS DECIMAL(20,5)) 我得到两个不同的结果: 42918.98788和42918.98787 如果我将其转换为十进制(20,6),它可以正常工作(42918.987875),但假设我需要将其转换为十进制(20,5) 在舍入时,我在哪里可以找到这种行为差异的根

在两个不同的sql Server上,我运行以下查询:

 declare @myDatetime as datetime = '2017-07-04 23:42:32.400'
 select CAST(@myDatetime AS DECIMAL(20,5))
我得到两个不同的结果: 42918.98788和42918.98787

如果我将其转换为十进制(20,6),它可以正常工作(42918.987875),但假设我需要将其转换为十进制(20,5)

在舍入时,我在哪里可以找到这种行为差异的根源?这是一个向上或向下四舍五入的选项吗?它是一种语言环境、国际背景、校勘还是其他?
是否是SQL的不同版本(12.0.5000.0 vs 13.0.4202.2)?

根据本文档:

Microsoft对其处理某些“不常见”转换的方式进行了一些更改:

SQL Server 2016 includes improvements to the precision of the following operations under compatibility level 130:

    Uncommon data type conversions. These include the following:
        float/integer to/from datetime/smalldatetime
        real/float to/from numeric/money/smallmoney
        float to real

因此,我怀疑这可能是我们在这种特定情况下看到的不同舍入。

转换为
十进制(20,5)
必然意味着你正在失去精度-为什么一个特定的值向上或向下取整都很重要-你已经放弃了精度。我知道我正在放弃精度,但我需要以一致的方式放弃精度。如果我有3.5,我需要到int,我需要一直到4或者一直到3,而不是有时候3,有时候4