Sql server 小数精度和小数位数
此表达式使用隐式转换:Sql server 小数精度和小数位数,sql-server,type-conversion,decimal,Sql Server,Type Conversion,Decimal,此表达式使用隐式转换: SELECT 9.999 * '9.999' 评价值为99.980001 如果我使用以下方法记录类型信息: SELECT SQL_VARIANT_PROPERTY(9.999 * '9.999', 'BaseType'), SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Precision'), SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Scale'), SQL_VARIA
SELECT 9.999 * '9.999'
评价值为99.980001
如果我使用以下方法记录类型信息:
SELECT
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'BaseType'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Precision'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Scale'),
SQL_VARIANT_PROPERTY(9.999 * '9.999', 'MaxLength')
我得到:
- BaseType数字
- 精度9
- 比例6
- 最大长度5
Operation:
e1 * e2
你会发现
Result precision
p1 + p2 + 1
所以在你的例子中4+4+1=>9
除此之外,你会注意到
SELECT SQL_VARIANT_PROPERTY(99.999 * '9.999', 'Precision'), --11 => p1+p1+1
SQL_VARIANT_PROPERTY(99.999 * '99.999', 'Precision'), --11 => p1+p1+1
SQL_VARIANT_PROPERTY(99.999 * 9.999, 'Precision'), --10 => p1+p2+1
SQL_VARIANT_PROPERTY(99.999 * 99.999, 'Precision') -- 11 => p1+p2+1
鉴于
SELECT SQL_VARIANT_PROPERTY(9.999 * '9.999', 'Precision') --9 => p1+p1+1
及
原因
Arithmetic overflow error converting varchar to data type numeric.
对不起,我应该自己做RTFM,谢谢!现在我必须找出为什么会出现这种精度增加。
Arithmetic overflow error converting varchar to data type numeric.