在Oracle和SQL Server中相同查询的结果不同

时间:2019-02-01 07:48:33

标签: sql-server oracle

我有2个相同的查询,但结果不同。对我来说,正确的结果是Oracle,但是我需要在SQL Server中执行

SQL Server:

select power((1 + (power(1 + 0.05, 1 / 365)) - 1), 50) - 1

RESULTADO
0.00

ORACLE

select power(1+(power(1+0.05,1/365)-1),50)-1 from dual

RESULTADO
0,00670596912409796087090820980679344256

为什么会这样?

2 个答案:

答案 0 :(得分:2)

在SQL情况下,您仅在“。”之后使用两个“ 0”。

尝试使用多于2.的值,之后应该会得到相同的结果。

:)

答案 1 :(得分:1)

SQL Server表达式中的数字为integer or decimal constants。 您需要使其中一些浮点常量,以便结果也为浮点。

您可以这样做:

select power((1 + (power(1 + 5E-2, 1 / 365E0)) - 1), 50) - 1

结果:

0,00670596912411203

您可以使用SQL_VARIANT_PROPERTY验证表达式的类型:

select SQL_VARIANT_PROPERTY ( 1 / 365E0, 'BaseType'), 
       SQL_VARIANT_PROPERTY ( 1 / 365E0, 'Precision'),
       SQL_VARIANT_PROPERTY ( 1 / 365, 'BaseType'), 
       SQL_VARIANT_PROPERTY ( 1 / 365, 'Precision'),
       SQL_VARIANT_PROPERTY ( 0.05, 'BaseType'), 
       SQL_VARIANT_PROPERTY ( 0.05, 'Precision')