Ja, gestern wollte ich einfach nur dividieren. Einen Dividenden durch einen Divisor, das ergibt ja einen Quotienten … 🙂
Klingt ganz einfach … denkste … auf dem SQL-Server ist es das nicht, wie ich spüren musste. Eigentlich wollte ich eine ganz einfache Rechnung durchführen. In einer Tabelle A gibt es zwei Integerspalten X und Y diese beiden Spalten sollten gegeneinander verrechnet werden.
Folgendes SQL-Stament habe ich verwendet:
select X/Y as Quotient from A
die ersten Tests sahen auch vielversprechend aus.
Hier eine kleine Übersicht:
4 / 2 = 2
64 / 4 = 16
Beim weiteren Test ergab sich folgende Situation:
50 / 4 = 12
5 / 3 = 1
Das machte mich dann doch etwas stutzig, da ich das vom SQL-Server nicht gewohnt war. Ein Blick in die Dokumentation bestätigt, der SQL-Server macht eine Integerdivision.
Ich hätte nie gedacht, dass der SQL-Server eine Integer-Division durchführt, nach dem gesunden Menschenverstand erwartet man, das hier eine Gleitkommazahl herauskommt.
Hier verhält sich der SQL-Server nicht so wie es andere Datenbanken tun. Oracle, Access und MySQL tun dies richtig. Das ist sehr ärgerlich, denn jetzt muss ich bei einer normalen Division noch eine Typenbetrachtung durchführen.
Ist zwar einfach, aber ärgerlich, das Statment würde jetzt zum Beispiel so aussehen:
select X/cast(Y as float) as Quotient from A
Dann gibst das richte Ergebnis:
50 / 4 = 12,5
5 / 3 = 1,6667
Ich frage mich nur, muss das sein … Microsoft macht es den Entwicklern wieder besonders schwer. Einen Entwickler kann man das ja noch zutrauen, aber viele meiner Kunden, verwenden den SQL-Server für Abfragen. Ob denen das Problem so bewusst ist? Ich werde sie darauf hinweisen, aber was ist mit dem Rest der Welt ….
Die Gründe von Microsoft werde ich wahrscheinlich nie verstehen … wie so manches anderes