- Wenn Sie
SELECT -100/-100*10das Ergebnis ausführen, ist0. - Wenn Sie
SELECT (-100/-100)*10das Ergebnis ausführen, ist10. - Wenn Sie
SELECT -100/(-100*10)das Ergebnis ausführen, ist0. - Wenn Sie
SELECT 100/100*10das 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)*10Sie das Ergebnis 10. es scheint, dass das /gegen den Wert -in der Gleichung angewendet wird und dann die Gleichung 100*10bestimmt 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)*10gibt auch 10 zurück. Es sieht so aus, -als würde der -Operator behandelt, der erst angewendet werden sollte, nachdem er 100*10berechnet wurde
A / -B * Cist 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 * 14evs 12e / (-13e) * 14evs 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.