Es sollte aber auch so gehen: select * from tabelle order by lpad(O_Nr,10,'0')
genau der richtige weg, gibt aber noch einen weg, den man nicht nur da in firebird benutzen kann
Code:
select * from tabelle order by 1000000+O_Nr
Bei sehr großen Datenmengen (d.h. nicht 1000 records, aber bei 1 Million
auf jeden Fall) kann man ein expression index dazu anlegen
d.h.
Code:
CREATE INDEX TAB_IDX1 ON TAB COMPUTED BY (1000000+O_NR)
oder
Code:
CREATE INDEX TAB_IDX2 ON TAB COMPUTED BY (lpad(O_Nr,10,'0'))
und ergänzend noch: Wenn du ähnlich wie bei Postleitzahlen was mit führender
0 Logik brauchst, wie hier beim Sortieren, dann nehm besser gar nicht erst ein
integer, sonder char oder varchar.
Als Auswahlkriterium des Datentyps: muss ich mit dem wert was rechnen? dann
numerisch, sonst eher nicht!
Die Summe von 10 Postleitzahlen zum Beispiel hat wenig sinnvolle Anwendungen,
durchschnitt auch nicht.
und beim char/varchar kannst du ggf per trgger direkt den wert mit lpad sauber
formatieren und gleich so speichern, das auch der order by sinnvoll ist