Ich wollte einfach nur dividieren

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

%-Zeichen in Like Bedingung berücksichtigen

Man lernt ja nie aus, nach jahrelanger SQL-Erfahrung stand ich nun vor dem Problem aus einer Textspalte einer SQL-Server-Datenbank alle Werte mit einem ‘%’-Zeichen zu extrahieren. Einfacher gesagt als getan, den das ‘%’-Zeichen ist ein Platzhalter für beliebige Zeichen. Da mußte ich also doch Dokumentation wälzen und habe dann den Befehl gefunden, der hilfreich ist.

Man erweitert den LIKE Operator um den die Answeisung ESCAPE, dann klappt es.

match_expression [NOT] LIKE pattern [ESCAPE escape_character]

Im Beispiel sieht das so aus:

SELECT foo FROM batz WHERE txt LIKE '% 19!%' ESCAPE '!'

Hier ist das !-Zeichen das Escapezeichen für Prozent. Das tolle dabei ist, das der Escapecharakter seperat definiert werden kann, den man weis ja nie wie eine Bedingung aussehen kann und der SQL-Server kann nicht raten.

Das tolle bei dem SQL-Befehl ist, das er auch bei Oracle-Datenbanken funktioniert, und kann so in datenbankunabhänigigen Prgrammen verwendet werden.

Einzelne Seite im Querformat in einem Word Dokument

Heute wollte ich in Word eine Seite im Querformat in eine Dokument Einschieben das eigentlich im Hochformat eingerichtet war. Nach einiger Sucherei hab ich es dann gefunden, war einfacher als ich dachte. Da hat Microsoft doch gut mitgedacht.

Wer das so etwas auch in Word lösen möchte geht wie folgt vor:

  1. Am Ende der letzten Seite die hochformtig ist, fügst Du einen manuellen Abschnittwechsel ein (Einfügen -> Wechsel -> Abschnittwechsel (nächste Seite))
  2. Jetzt setzt Du den Cursor auf die neue erste Seite nach dem Abschnittwechsel und wählst als Format Querformat aus (Datei -> Seite einrichten -> Ausrichtung Quer)

… jetzt müßte der neue Abschnitt quer sein, während die Seiten davor weiter hochformatig sind. Dieses Spielchen läßt sich beliebig oft wieder holen.