- Nếu bạn thực hiện
SELECT -100/-100*10
kết quả là0
. - Nếu bạn thực hiện
SELECT (-100/-100)*10
kết quả là10
. - Nếu bạn thực hiện
SELECT -100/(-100*10)
kết quả là0
. - Nếu bạn thực hiện
SELECT 100/100*10
kết quả là10
.
BOL nói:
Khi hai toán tử trong một biểu thức có cùng mức ưu tiên của toán tử, chúng được đánh giá từ trái sang phải dựa trên vị trí của chúng trong biểu thức.
Và
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
Có phải BOL sai, hoặc tôi đang thiếu một cái gì đó? Có vẻ như -
đang loại bỏ quyền ưu tiên (dự kiến).
-
đó dường như đang làm cho luồng đi "sai". Nếu bạn cố gắng -100/(-100)*10
bạn sẽ nhận được kết quả 10
. có vẻ như /
đang được áp dụng đối với giá trị -
trong phương trình và sau đó phương trình 100*10
đang được xác định. Tôi không chắc đây là lỗi với BOL, nhưng nhiều hơn nữa là SQL Server không hoạt động như mong đợi. Có thể đáng để nêu vấn đề trên sql-docs và xem phản hồi của họ ở đó là gì; có lẽ một ghi chú có thể được thêm vào tài liệu tư vấn về "tính năng".
SELECT -100/(-100)*10
cũng trả về 10. Dường như -
được coi là các -
nhà điều hành cần được áp dụng sau khi 100*10
được tính
A / -B * C
là A <div> <negate> B <multiply> C
. Negate có quyền ưu tiên thấp hơn nhân, theo tài liệu, vì vậy kết quả là A / -(B * C)
. Bạn có thể thấy điều này rõ ràng hơn bằng cách sử dụng hằng số nổi: 12e / -13e * 14e
so 12e / (-13e) * 14e
với 12e / 13e * 14e
. Lý do điều này khiến chúng ta khó chịu là vì chúng ta thường mong đợi trừ một bậc sẽ trở thành một phần của nghĩa đen, hoặc ít nhất là có mức độ ưu tiên rất cao, nhưng đó không phải là cách T-SQL làm.