Rolf B: mysql, Select Abfrage varchar als Integer behandeln

Beitrag lesen

Hallo Anna,

WHERE spalte>=1021 .... da die Spalte aber keine integer ist geht es nicht.

Was genau geht nicht? Hast Du das ausprobiert? In MYSQL sollte das nämlich gehen. Denn MYSQL teilt die Vorliebe von PHP zu wilden, ungefragten Typkonvertierungen.

Wenn die führenden Nullen Teil deiner Werte sind (Postleit"zahlen" zum Beispiel), ist ein String auch der richtige Typ.

Aber für die Abfrage gibt's zwei Alternativen, die einem Standard-SQL näher kommen:

(1) Typgerecht vergleichen

SELECT spalte FROM table WHERE spalte >= '01021'

(2) Spalte für den WHERE in Zahl konvertieren

SELECT spalte FROM table WHERE CAST(spalte as UNSIGNED) >= 1021

"Unsigned"?! Ja, in der Tat. "INTEGER" versteht er nicht. Braucht er auch nicht. Weil er das eigentlich automatisch und ohne CAST tut.

Der CAST hat einen Nachteil: Wenn es einen Index gibt, der diesen WHERE optimieren könnte, dann verhindert CAST seine Verwendung. Der Vergleich mit der Zeichenkette nutzt ihn dagegen.

Rolf

--
sumpsi - posui - obstruxi