tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
426
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    crazyPower crazyPower ist offline Mitglied Silber
    Registriert seit
    Nov 2004
    Beiträge
    64
    Hallo,

    ich möchte innerhalb einer Spalte mehrere Sortierkriterien angeben.
    in der Spalte stehen folgende Werte:

    312AA03
    123BG01
    BER923
    A0344A
    02331A

    Jetzt sollen zuerst alle Werte kommen, die mit einer Zahl beginnen (die niedrigste zuerst), dann alle die mit einem Buchstaben beginnen (A zuerst). Damit sollte di obige Liste so aussehen:
    02331A
    123BG01
    312AA03
    A0344A
    BER923

    Wenn ich einfach nur ASC sortiere, kommen zuerst alle Buchstaben dann Zahlen. DESC kommen zuerst alle hohen Zahlen, dann von Z aufwärts nach A...

    Kann ich das schon per SQL sortiert bekommen, oder muss ich das in meinem Programm erledigen?

    cu

    cP
     

  2. #2
    Avatar von shutdown
    shutdown shutdown ist offline Mitglied Smaragd
    Registriert seit
    Jun 2004
    Beiträge
    1.026
    nein, das geht nicht mit Standard-SQL.

    Dazu müsstest du (sofern das möglich ist), bei deinem DBMS die Sortiereinstellungen ändern.

    Was du machen willst, geht deshalb nicht, da eine Spalte immer einen atomaren Wert enthält (bzw enthalten soll - der wird dann aber auch als ein solcher interpretiert, wenn du da dein Tagebuch reinschreibst).

    Und atomare Werte kannst du eben nicht weiter zerteilen.

    gruß shutdown
     
    Versuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!

  3. #3
    Avatar von Exceptionfault
    Exceptionfault Exceptionfault ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Ort
    Neckarsulm
    Beiträge
    348
    Nun, es gibt schon einen Weg, der zwar nicht sehr flexibel ist, aber die Sortierung immerhin in der Datenbank ermöglicht.

    Schreibe dir eine Stored Function, die als Eingabewert dein Feld erwartet und als Rückgabewert einen String liefert. Diese Funktion muss nun einfach deinen übergebenen Wert prüfen und einen "sortierbaren" String zurückliefern.
    Bsp: Wenn dein Feld mit einer Zahl beginnt sind die Anfangszeichen des Strings
    Ax wobei X die Zahl ist
    hat dein Feld ein Buchstabe
    Bx, wobei X der entsprechende Buchstabe ist.

    In deinem Beispiel also:
    mySORT( 02331A ) = A02331A
    mySORT( 123BG01 ) = A123BG01
    mySORT( 312AA03 ) = A312AA03
    mySORT( A0344A ) = B0344A
    mySORT( BER923 ) = BER923

    Nennen wir die Stored Function mySORT dann könnte der Select
    SELECT FELD, mySORT( Feld ) FROM TABLE ORDER BY mySORT( FELD );

    Und um das ganze auch performancetechnisch zu optimieren sollte man auf Feld einen FBI (Function Based Index) setzen, also
    CREATE INDEX idx_mySORT
    ON TABLE ( mySORT( FELD ) )
    TABLESPACE INDX;
    Geändert von Exceptionfault (05.07.05 um 23:04 Uhr)
     
    liebe Grüße
    Exceptionfault (http://exceptionfault.de)

    Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 02.06.10, 12:52
  2. MySQL Select, mehrere Werte in einer Spalte
    Von Cryog3n im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 15.05.09, 18:36
  3. Abfrage von CLOB Spalte aus einer Oracle DB
    Von Templorials im Forum PHP
    Antworten: 0
    Letzter Beitrag: 24.07.08, 11:44
  4. Antworten: 8
    Letzter Beitrag: 28.10.05, 22:08
  5. JTable: mehrere Werte in einer Spalte
    Von Crazy Bytes im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 7
    Letzter Beitrag: 10.05.04, 13:17