Einzelnen Beitrag anzeigen

Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Integer als Text sortieren

  Alt 2. Apr 2021, 07:48
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
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von IBExpert ( 2. Apr 2021 um 07:53 Uhr)
  Mit Zitat antworten Zitat