Datenbank - Strings sortieren wie eine Nummer ??



  • Hi,
    ich bin gerade dabei in meiner TADOQuery, die ein DBGrid als Datasource bedient
    eine Möglichkeit zu suchen, in der ich eine Spalte ("Nummer") vom Typ char (also "Strings") so sortieren will,
    daß nach 1, 2 kommt und nicht 11 ..
    Soll : 1,2,3,4,5
    Ist : 1,11,12,13
    Eine mögliche Lösung habe ich auch, aber die gefällt mir aus mehreren Gründen nicht besonders gut ..

    so gehts
    SELECT lpad(Nummer,10,' ') as Nummer ORDER BY Nummer

    andere Ideen ???
    Wilfrid

    [ Dieser Beitrag wurde am 20.01.2003 um 18:03 Uhr von Jansen editiert. ]



  • Die Strings in Integer-Werte umwandeln und dann sortieren.
    Was benutzt du denn für eine DB.
    Schau mal dort in die Hilfe, wie man String nach Int konvertieren kann.



  • @Wilfrid:

    Was genau gefällt Dir denn an Deinem SQL-Statement nicht? Da sortiert doch richtig, oder?



  • @JeGr sorry ich vergass : die DB ist mySQL

    @F98 : prinzipiell ja aber wenn ich dann über locate im Grid suchen will habe ich ein anderes Problem.... und ich will eigentlich beides !!



  • Also solltest Du erstmal das "andere Problem" beseitigen. Denn nochmal die Daten lokal sortieren ist unnnötig.



  • wie kommst Du auf unnötig ?? 😕



  • Er meint, das du das andere Problem beseitigen sollst, da die Sortierung über das SQL Statement ja funzt.
    Zusätzlich zum SQL Statement nochmal lokal sortieren ist unnötig, denn ein DBMS führt die SQL-Abfragen auf der Maschine aus, wo das DBMS liegt.
    Im Gegensatz zu Access, wo du eine Anfrage an die [__dynamic cast(Datenbank)] schickst und Access feuert dir die ganze Datenbank zurück und die Abfrage wird lokal auf und von deiner Maschine ausgeführt.



  • Tja, aber die interne "sortierroutine" ist doch, denke ich zumindest mal, schneller und einfacher zu benutzen, als jedesmal ein komplettes SELECT an die DB abzusetzen....
    .. oder warum gibt es dann das Feld TADOQuery::Sort ....

    nochmal : ich will zunächst daß die Daten richtig sortiert werden...
    (das auch z.B. durch Anklicken der Gridleiste umschalten !!) s.o.

    .. und dann bei Bedarf über Locate irgendwo hinspringen !!

    .. und beides zusammen kann lpad(xx..) eben nicht
    😕



  • Jo, jetzt klingelts.

    Ich dachte erst, Du willst daten bloß einmal von der DB holen. Du meinst aber, wenn Du die Daten in einem Grid darstellst willst Du beim Klick auf den SpaltenHeader die Daten entsprechend der Spalte sortiert darstellen. Hm.
    Da fallen mir nur 2. Möglichkeiten ein:

    1. mit Hilfe eines Stringrids (Siehe FAQ sortieren I, und sortieren II)
    2. eine antsprechende Komponente runterladen (www.torry.net)



  • Joo,

    ich habe mir einen Umweg geschrieben, indem ich beim Spaltenklick nachsehe,
    ob die Spalte ein "eigenes" Sortierkriterium hat..
    .. und fordere dann über ein neues Select...order by "SpezialSpaltenOrderBy" die Daten nochmals an...
    nicht schön aber es geht

    Wilfrid


Anmelden zum Antworten