SQLite - Order by mit NULL/leer am Ende



  • Hallo,
    ich habe ein haufen strings und will die alphabetisch sortieren, doch das Order by von SQLite setzt mir leere Felder an den Anfang ... wie kann ich die ganz ans Ende setzen?
    Laut google bin ich wohl nicht der einzige der dieses Problem hat, doch lösen konnte ich es nicht 😞 .

    Danke für Hilfe 🙂

    MfG



  • Black Shadow schrieb:

    Hallo,
    ich habe ein haufen strings und will die alphabetisch sortieren, doch das Order by von SQLite setzt mir leere Felder an den Anfang ... wie kann ich die ganz ans Ende setzen?
    Laut google bin ich wohl nicht der einzige der dieses Problem hat, doch lösen konnte ich es nicht 😞 .

    Danke für Hilfe 🙂

    MfG

    Hast Du denn leere Strings in der Datenbank ? Dann sollte sowas helfen : WHERE string <> ''



  • Hi,
    ja ich habe leere strings in der Datenbank. Genau diese Reihen, in denen dieser Eintrag leer ist, will ich ans Ende setzen.
    Ich weiß nicht so recht wie ich deinen Vorschlag implementieren soll. Zumindest kriege ich einen syntax error wenn ich an meine where-anfrage einfach ein "WHERE ... AND columnname <> ORDER BY columnname" ?!
    Wie muss ich das anwenden?

    Danke 🙂

    MFG



  • "WHERE ... AND columnname <> '' ORDER BY columnname"
    oder
    "WHERE ... AND columnname != '' ORDER BY columnname"
    oder
    "WHERE ... AND columnname != NULL ORDER BY columnname"

    Sollte klappen 🙂



  • Mit dieser Methode werden die leeren String nicht ans Ende gesetzt, sondern ganz weggelassen. Ansonsten wären da noch die ASC bzw DESC Varianten. Damit kannst Du angeben, ob Du die Sortierung auf- oder absteigend haben möchtest. Zu Deiner Frage :

    WHERE ... AND columnname <> '' ORDER BY columnname [ASC oder DESC]
    

    Das '' hat gefehlt. Die Schlüsselwörter ASC bzw DESC werden hinten angehängt.

    Meine Vorschläge basieren allerdings auf MySQL. Vielleicht klappt es ja auch bei Dir 🕶



  • Hallo,
    danke, mit den '' klappts jetzt, jedoch werden, wie SciFi schon sagte, die leeren Strings nun ganz weggelassen. Das ist aber eigentlich nicht das was ich suche, da andere Felder derseleben Reihe eben nicht leer sind und relevante Informationen beinhalten 😞 .
    Gibt es auch hierfür eine Lösung?
    Oder muss ich eben jetzt alle Strings mir holen und sortieren, die nicht leer sind und dann die leeren anhängen?

    Hier: http://marc.info/?l=sqlite-users&m=115435309523114&w=2
    macht das jemand so: ORDER BY coalesce(columnname, 'ZZZZZ') desc
    Ich verstehe nicht, was coalesce macht, aber vielleicht wird hier versucht einen String "temporär" und nur innerhalb der Order-Anfrage durch ZZZZZ zu ersetzen, damit er am Ende der Reihe auftaucht ?! Wo ist die Bedingung, dass der string empty sein muss?

    Danke für weitere Antworten!

    [edit]
    ich merke gerade dass mein Threadtitel unglücklich gewählt ist - ich wills ja nicht ohne sondern am ende, sry 🙄 .

    MfG



  • Schau mal hier : http://www.tsql.de/transact-sql/functionen/howto-coalesce.htm

    Das dürfte auch die Lösung Deines Problemes sein, wenn ich das richtige verstehe, was dort geschrieben ist 🙂 Ich weiss natürlich nicht, ob das so von SQLite unterstützt wird.

    Edit :

    coalesce(columnname, 'ZZZZZ')
    

    Ich denke, dass der NULL-Wert in der Spalte columnname durch 'ZZZZZ'ersetzt wird.



  • @SciFi: ich komme mit coalesce irgendwie net klar ... ich schaffe es z.b. die leeren Einträge an das Ende zu setzen, aber dann sind die anderen nicht sortiert usw.

    Folgende Lösung scheint bei mir zu funktionieren, was hälst du davon? Kann man die noch optimieren?

    SELECT columnname, columnname2, ..., (columnname = '') as bla FROM table WHERE ... ORDER BY bla, columnname

    ?

    MfG



  • Black Shadow schrieb:

    @SciFi: ich komme mit coalesce irgendwie net klar ... ich schaffe es z.b. die leeren Einträge an das Ende zu setzen, aber dann sind die anderen nicht sortiert usw.

    Folgende Lösung scheint bei mir zu funktionieren, was hälst du davon? Kann man die noch optimieren?

    SELECT columnname, columnname2, ..., (columnname = '') as bla FROM table WHERE ... ORDER BY bla, columnname

    ?

    MfG

    Wenn es funktioniert, dann würde ich es so lassen. 🤡


Anmelden zum Antworten