Axel Richter: Null Problem Mysql

Beitrag lesen

Hallo,

Ich habe ein (Null) Problem ;)

Nein. NULL ist nicht gleich 0.

Sobald eine Null im Anfang der PLZ ist funktioniert diese Abfrage nicht mehr.
SELECT  PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN (0115) ORDER BY FIELD(PLZ,0115)
Infos zur Spalte PLZ:
PLZ  smallint(5)  UNSIGNED ZEROFILL
Wo ist das Problem mit der Null ? Was mach ich falsch?

Du begehst den Fehler vieler Nutzer moderner Programmiersysteme. Du achtest nicht auf Typunterschiede. Das kommt daher, dass die Programmiersysteme häufig automatisch Typen anpassen. Allerdings klappt das nicht immer, wie gewünscht.

Substring ist eine String-Funktion. Dein Feld PLZ speichert aber Zahlen. Würdest Du Dir den Inhalt von PLZ unformatiert ausgeben lassen, würdest Du sehen, dass die führenden Nullen nicht gespeichert werden. In PLZ steht also 115, nicht 0115. Nachdem Du den Wert von PLZ mit einer String-Funktion behandelt hast, vergleichst Du ihn dann wiederum mit einer Zahl. Das sieht man daran, dass die 0115 in IN (0115) nicht in Anführungszeichen gesetzt ist.

Lösungsvorschlag:
PLZ wird ein String-Feld (char, varchar). Dort wird dann z.B. gespeichert:
PLZ
...
01151
01152
01153
03044
03056
...

Die Abfrage wird:
SELECT PLZ FROM Tabelle WHERE SUBSTRING(PLZ,1,4) IN ('0115')
und ergibt:
PLZ
01151
01152
01153

Was mich auch noch interessieren würde: Was soll
...ORDER BY FIELD(PLZ,0115)
bewirken?

viele Grüße

Axel