ORDER BY Sortierung

Hallo liebe PG’ler,
ich bin auf dem Gebiet pg relativ neu und habe hier und da noch ein paar kleine Fragen.

Zur Abfrage meiner Datenbank mit VB.NET verwende ich:

SELECT * FROM tab1 WHERE benutzervorname = ‘Siggi’ ORDER BY nr;


Als Ergebnis erhalte ich folgendes:

Nr - Name

1 - Siggi
10 - Siggi
11 - Siggi
12 - Siggi
2 - Siggi
20 - Siggi
21 - Siggi
usw.

Das ist natürlich nicht das, was ich will. Ich hätte gerne
1
2
10
11
usw…


Was muss ich an der Abfrage ändern? :confused: :confused: :confused:
Ich weiß, dass ich das umgehen kann, wenn ich z.B. 01 in der id verwende anstatt 1.
Aber ich weiß ja heute nicht ob 01 reicht. Vielleicht brauche ich morgen 001 oder 0001.
Da ich das nicht weiß, brauche ich ne Lösung, die wirklich von 1 - unendlich auflistet.

Offensichtlich speicherst Du Zahlen in einem varchar Feld. Ändere das Feld in einen integer (oder numeric) Datentyp und schon klappt die Sortierung.

Merke:
Ein Datum immer mit einem date Datentyp speichern
Ein Datum + Uhrzeit immer mit einem timestamp Datentyp speichern
Zahlen immer mit einem integer (oder numeric) Datentyp speichern.

Danke für deine schnelle Antwort - werde ich mir merken.


Was mache ich bei Werten , die eine Kombination aus Buchstaben und Zahlen sind?


Bsp:
DE1
DE10
DE2
DE20
usw.

Kann ich die Sortierung da auch irgendwie “verbessern”?
An dieser Stelle kann ich ja (zumindest bei MySQL) kein int mehr nutzen, oder?
Ich merke schon, dass PG im Vergleich zu MySQL viel mehr kann und sich der Umstieg gelohnt hat :smiley:

Nein, da kann man keinen int verwenden.

Abhängig davon wie sortiert werden soll, kannst Du mit einer regex die zeichen entfernen und das Ergebnis in eine Zahl verwandeln die dann sortierfähig ist.

Ansonst bleibt noch die Möglichkeit eine eigene Funktion zu schreiben die aus dem Eingabewert einen “Sortierwert” errechnet und diese dann zum Sortieren zu verwenden.

Hab jetzt einfach ein ID Feld (typ serial, AutoIncrement) hinzugefügt und danach sortieren lassen. Da die Nummern immer aufsteigend vergeben werden gehts auch so :smiley:

Kann ich auch 2-fach sortieren?


z.B.

Sortiere Nach Name und wenn Name mehrfach vorhanden die dann nach nummer?

z.B.

01 Alexander
02 Bernd
03 Bernd
12 Bernd
05 Dieter

Klar:

ORDER BY vorname, id