Hallo,
ich habe eine Spalte in einer Tabelle nach der sortiert werden soll. Sie ist vom Typ varchar und enthält Werte wie z.B. 1,2,3,12,13a,m16, usw. - also Zahlen und Buchstabenkombinationen.
Ist es möglich so zu sortieren, dass das Ergebnis danns o aussieht:
1
2
3
12
13a
m16
Im Moment würden 12 und 13a nach der 1 kommen. Mit CAST geht es ja leider nicht, da ein Fehler erzeugt wird sobal kein rein numerischer Wert übergeben wird.
Viele Grüße
Chris
Und wo sollen 13a und m16 einsortiert werden?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Ich glaube, dein Datenbankdesign ist völlig kaputt.
Mach das richtig, dann funktioniert das Sortieren auch ohne Probleme.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Punkt 1: ads hat Recht.
Punkt 2: PostgreSQL ist's, wenn es dennoch geht:
Fixe dein DB-Design!Code:test=*# select * from cevou ; a ----- m16 13a 2 1 3 12 (6 Zeilen) Zeit: 0,219 ms test=*# select * from cevou order by regexp_replace(a,'[^0-9]','')::int; a ----- 1 2 3 12 13a m16 (6 Zeilen) Zeit: 0,296 ms
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Danke für die Antworten,
ich bin ja immer bereit dazuzulernen. Was meint ihr mir "fixe dein Datenbankdesign"?
ISt es so "abnormal" eine varchar-Spalte so zu sortieren, dass die Zahlen in einer richtigen Reihenfolge stehen?
Ja. Entweder du möchtest nach Zahlen sortieren, dann nimm auch eine Spalte mit Zahlen da drin her. Oder du möchtest nach etwas anderem sortieren, dann dürfen das aber nicht nur Zahlen als Sortiervorgabe sein.
Dieses DB-Design ist fehlerhaft und lösst sich sicher besser implementieren. Außerdem ist das Sortieren hinterher sicherlich schneller als mit dem Workaround von akretschmer - der funktioniert zwar, ist aber nie im Leben schnell.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Das Problem ist, dass es in dem Programm keine festeVorgabe gibt für dieses Feld.
In der Regel sind es ja nur Zahlen - früher hatte ich es auch als Integer-Feld. Jetzt kann es aber halt durchaus vorkommen, dass anstatt nur einer Zahl 12a, 12b, 12c oder ähnliches feststeht.
Man könnte theoretisch ein Extrafeld für Prefix und Suffix - aber ist das die besser Lösung? Dann müsste ich wieder die komplette Tabelle neu aufbauen, weil ich ja keine Spalte an einer bestimmten Position einschieben kann.
Vielleicht sollte man sich Gedanken machen, ob der grundsätzliche Aufbau der Tabelle/Datenbank überhaupt Sinn macht.
Ich unterbreite da gern ein Angebot ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Es geht hier um ein Programm, das Sportwettkämpfe auswertet. Bei diesem Feld explizit geht es um die "Wettkampfnummern".
Oft sind diese numerisch es kommt aber durchaus auch vor, dass halt Buchstaben mit zur Wettkampfnummer gehören.
Deshalb habe ich mich für ein varchar entschieden.
Du kannst mir gerne etwas vorschlagen ich bin über Hilfe immer sehr dankbar.
Was, ein Angebot für Support oder eine Lösung? ;-)
Versuch dich mal mit einer getrennten Spalte für die Sortierung, unabhängig von den Wettkampfnummern.
Alternativ schreib dir eine Sortierfunktion, die genau das abbildet, was du haben willst. Das wird zwar elendig langsam, aber funktioniert.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen