ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
426
426
EMPFEHLEN
-
05.07.05 09:18 #1
- 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
-
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ß shutdownVersuche nie Probleme zu lösen, von deren Existenz du noch gar nichts weißt!
-
05.07.05 22:59 #3
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
-
Aus einer SQL Tabelle mehrere verschiedene Werte einer Spalte auslesen
Von supercat1510 im Forum PHPAntworten: 5Letzter Beitrag: 02.06.10, 12:52 -
MySQL Select, mehrere Werte in einer Spalte
Von Cryog3n im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 15.05.09, 18:36 -
Abfrage von CLOB Spalte aus einer Oracle DB
Von Templorials im Forum PHPAntworten: 0Letzter Beitrag: 24.07.08, 11:44 -
Höchsten Wert einer bestimmten Spalte innerhalb einer Tabelle ermitteln
Von Bomber im Forum PHPAntworten: 8Letzter Beitrag: 28.10.05, 22:08 -
JTable: mehrere Werte in einer Spalte
Von Crazy Bytes im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 7Letzter Beitrag: 10.05.04, 13:17





Zitieren
Login





