代码之家  ›  专栏  ›  技术社区  ›  Luis Pavez

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

  •  2
  • Luis Pavez  · 技术社区  · 7 年前

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

    SQL Server:

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

    神谕

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Julius Zeeh    7 年前

    在SQL情况下,在“.”之后只使用两个“0”

    试着多用2。之后会给你同样的结果。

    :)

        2
  •  1
  •   Vojtěch Dohnal    7 年前

    SQL Server表达式中的数字为 integer or decimal constants 您需要将其中一些设置为float常量,以便结果也是float。

    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')