- Wenn Sie
SELECT -100/-100*10
das Ergebnis ausführen, ist0
. - Wenn Sie
SELECT (-100/-100)*10
das Ergebnis ausführen, ist10
. - Wenn Sie
SELECT -100/(-100*10)
das Ergebnis ausführen, ist0
. - Wenn Sie
SELECT 100/100*10
das Ergebnis ausführen, ist10
.
BOL sagt:
Wenn zwei Operatoren in einem Ausdruck dieselbe Operatorprioritätsstufe haben, werden sie basierend auf ihrer Position im Ausdruck von links nach rechts ausgewertet.
Und
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
Ist BOL falsch oder fehlt mir etwas? Es scheint, dass das -
den (erwarteten) Vorrang abwirft.
-
scheint den Fluss "falsch" zu machen. Wenn Sie versuchen, erhalten -100/(-100)*10
Sie das Ergebnis 10
. es scheint, dass das /
gegen den Wert -
in der Gleichung angewendet wird und dann die Gleichung 100*10
bestimmt wird. Ich bin nicht sicher, ob dies ein Fehler bei BOL ist, aber mehr noch, dass sich SQL Server nicht wie erwartet verhält. Es könnte sich lohnen, ein Problem mit SQL-Dokumenten anzusprechen und zu sehen, wie sie darauf reagieren. Vielleicht könnte der Dokumentation, die über die "Funktion" informiert, ein Hinweis hinzugefügt werden.
SELECT -100/(-100)*10
gibt auch 10 zurück. Es sieht so aus, -
als würde der -
Operator behandelt, der erst angewendet werden sollte, nachdem er 100*10
berechnet wurde
A / -B * C
ist A <div> <negate> B <multiply> C
. Negieren hat gemäß den Dokumenten eine niedrigere Priorität als Multiplizieren. Das Ergebnis ist also A / -(B * C)
. Sie können mit Floating - Konstanten dies deutlicher sehen: 12e / -13e * 14e
vs 12e / (-13e) * 14e
vs 12e / 13e * 14e
.Die Grunde , dies uns abwirft, weil wir in der Regel einstelliger minus erwarten Teil der wörtlichen zu werden, oder zumindest eine sehr hohe Priorität, aber das ist nicht , wie T-SQL funktioniert.