Один и тот же запрос другой результат в Oracle и SQL Server - PullRequest
0 голосов
/ 01 февраля 2019

У меня 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 голосов
/ 01 февраля 2019

Числа в выражении SQL Server: целочисленные или десятичные константы .Вам нужно сделать некоторые из них константами с плавающей точкой, чтобы результат тоже был с плавающей точкой.

Вы можете сделать это так:

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')
0 голосов
/ 01 февраля 2019

В случае SQL, если вы используете только два «0» после «.»

Попробуйте использовать более 2. После этого вы получите тот же результат.

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...