Я думаю, что я схожу с ума
SELECT 30.0/(-2.0)/5.0; SELECT 30.0/-2.0/5.0;
что здесь происходит?
кто сказал, что x/(y)/zбудет (x/y)/z а не x(y/z)?-
x/(y)/z
(x/y)/z
x(y/z)
SELECT 30.0/(-2.0)/5.0; довольно ясно:
SELECT 30.0/(-2.0)/5.0;
SELECT 30.0/(-2.0)=-15.0 -15.0/5.0=-3.0
второй выбор интерпретируется как: SELECT 30.0/-(2.0/5.0);
SELECT 30.0/-(2.0/5.0);
2.0/5.0=0.4 30.0/-0.4=-75.0
см .: Приоритет оператора (Transact-SQL)
Ваш второй выбор выполняется как:
select 30.0/-(2.0/5.0)
Похоже, что знак минус заставляет SQL Server инвертировать последнее деление - почти наверняка это ошибка!