- Eğer yürütürseniz
SELECT -100/-100*10
sonuç olur0
. - Eğer yürütürseniz
SELECT (-100/-100)*10
sonuç olur10
. - Eğer yürütürseniz
SELECT -100/(-100*10)
sonuç olur0
. - Eğer yürütürseniz
SELECT 100/100*10
sonuç olur10
.
BOL belirtir:
Bir ifadedeki iki operatör aynı operatör öncelik düzeyine sahip olduğunda, ifadedeki konumlarına göre soldan sağa değerlendirilirler.
Ve
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
BOL yanlış mı yoksa bir şey mi kaçırıyorum? Görünüşe göre -
(beklenen) önceliği atıyor.
-
akışın "yanlış" gitmesine neden oluyor gibi görünüyor. Eğer denersen -100/(-100)*10
sonucu alırsın 10
. görülüyor ki /
değerine karşı uygulandığı -
denklemde ve daha sonra denklem 100*10
belirlenmektedir. Bunun BOL ile ilgili bir hata olduğundan emin değilim, ancak daha çok SQL Server beklendiği gibi davranmıyor. Sql-docs hakkında bir konu gündeme getirmeye ve yanıtlarının orada ne olduğunu görmeye değer olabilir ; belki belgelere "özellik" hakkında bilgi veren bir not eklenebilir.
SELECT -100/(-100)*10
ayrıca 10 -
değerini döndürür. Görünüşe göre , -
yalnızca 100*10
hesaplandıktan sonra uygulanması gereken operatör olarak kabul edilir
A / -B * C
olduğunu A <div> <negate> B <multiply> C
. Negate, dokümanlara göre çarpmadan daha düşük önceliğe sahiptir, dolayısıyla sonuç olur A / -(B * C)
. Kayan sabitleri kullanarak bunu daha açık bir şekilde görebilirsiniz: 12e / -13e * 14e
vs 12e / (-13e) * 14e
vs 12e / 13e * 14e
Bunun bizi atmasının nedeni, genellikle tekli eksi değerinin değişmezin bir parçası olmasını beklememiz veya en azından çok yüksek önceliğe sahip olmasıdır, ancak T-SQL böyle değildir İşler.