Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Varchar Sort mit Nummern

  1. #1
    cevou ist offline Neuer Benutzer
    Registriert seit
    25.08.2008
    Beiträge
    24

    Standard Varchar Sort mit Nummern

    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

  2. #2
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    493

    Standard

    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?'

  3. #3
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von cevou Beitrag anzeigen
    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
    Punkt 1: ads hat Recht.

    Punkt 2: PostgreSQL ist's, wenn es dennoch geht:

    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
    Fixe dein DB-Design!

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    cevou ist offline Neuer Benutzer
    Registriert seit
    25.08.2008
    Beiträge
    24

    Standard

    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?

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  7. #7
    cevou ist offline Neuer Benutzer
    Registriert seit
    25.08.2008
    Beiträge
    24

    Standard

    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.

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  9. #9
    cevou ist offline Neuer Benutzer
    Registriert seit
    25.08.2008
    Beiträge
    24

    Standard

    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.

  10. #10
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Zitat Zitat von cevou Beitrag anzeigen
    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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum