Chr*_*ris 9 t-sql sql-server precision
我在SQL服务器中有一个视图,如下所示:
select 6.71/3.41 as NewNumber
Run Code Online (Sandbox Code Playgroud)
结果是1.967741(注意6个小数点) - >decimal (38,6)
我在计算器中尝试相同的事情,但结果是 1.967741935483871xxxx
我想强制SQL Server返回更准确的结果,就像decimal(38,16)
我已经尝试过像铸造这样的显而易见的东西,但是SQL Server没有改进输出我只是得到一些尾随的零结果1.9677410000
有没有办法强制SQL Server不截断结果或提供更准确的结果?
Mar*_*ith 17
如果你想要那样的东西decimal(38,16)你需要在截断已经发生之后投射输入而不是输出!
SELECT CAST(6.71 AS DECIMAL(38,18))/3.41 AS NewNumber
Run Code Online (Sandbox Code Playgroud)
返回
1.9677419354838709
Run Code Online (Sandbox Code Playgroud)
检查数据类型
SELECT
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'BaseType'),
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'Precision'),
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'Scale')
Run Code Online (Sandbox Code Playgroud)
返回
numeric 38 16
Run Code Online (Sandbox Code Playgroud)
这只是添加一个额外的链接作为评论的后续内容.对于规则decimal来decimal转换在BOL描述.该链接包括以下短语
*结果精度和标度的绝对最大值为38.当结果精度大于38时,相应的标度会减小,以防止结果的整数部分被截断.
但是没有详细说明如何进行这种截断.这在此处记录.