MySQL: Nach Zahlenwert sortieren, leere Einträge aber ans Ende

Gray

Erfahrenes Mitglied
Hi,

ich möchte eine Spalte (als Varchar definiert) nach den enthaltenen Zahlenwerten sortieren (kein Problem), allerdings sollen leere Einträge ans Ende der Sortierung.

Im Moment sieht es also so aus:

leer
leer
leer
12
24
123
...

Ich hätte es nun aber gerne so:

12
24
123
...
leer
leer
leer
 
Im ORDER BY NULL zu einer Zahl wandeln die Grösser als deine Grösste Zahl ist.
SQL:
ORDER BY IFNULL(myfield, 9999999999999)

Nachtrag: Du hast varchar? Das solltes du zu einer Zahl wandeln
SQL:
ORDER BY IFNULL( CAST(myfield AS SIGNED), 9999999999999)
 
Zuletzt bearbeitet von einem Moderator:
THX, aber leider funktionieren beide Varianten nicht.
Es gibt keine Fehlermeldung und die Sortierung bleibt unverändert.

Ggf. liegt es daran das es nicht NULL ist sondern ein leerer String?
 
So vielleicht:
SQL:
ORDER BY (
CASE
    WHEN feld IS NULL THEN 99
    WHEN feld = '0' THEN 99
    WHEN feld = '' THEN 99
    ELSE feld
END)

Damit wird jetzt NULL, 0 und leer geprüft und mit dem Wert 99 versehen. Wobei die Zahl 0 ja vermutlich nicht gebraucht wird!?
 
Zuletzt bearbeitet:
Ah, ein leerer String. Ganz ungemütlich. Besser jeweils NULL verwenden als ein Leerer String.
Ein Leerer String wird beim CAST in ein 0 gewandelt. NULL bleibt NULL

Entweder du wandelst "" in NULL
SQL:
NULLIF(TRIM(myfield), '')
-- Und zusammen
ORDER BY IFNULL( CAST(NULLIF(TRIM(myfield), '') AS SIGNED), 9999999999999)

Oder gleich ganz umbauen
SQL:
ORDER BY
    CASE
        WHEN TRIM(myfield) = ''
        THEN  9999999999999
        ELSE  CAST(myfield) AS SIGNED)
    END
 
Zuletzt bearbeitet von einem Moderator:
Zurück