Ilja: Zahlen sortieren mit MySQL

Beitrag lesen

yo Michi,

da bin ich wieder, hat ein wenig gedauert. nun aber zu dem lösungsweg. das erste, was man machen muss, herauszufinden, ob das letzte zeichen ein buchstabe ist oder nicht. da habe ich unter mysql keine funktion gefunden und es deswegen etwas umständlich über eine liste gemacht. vielleicht kann man das ja verbessern falls jemand eine funktion kennt. je nachdem ob es ein buchstabe ist oder nicht, wird das letzte zeichen abgeschitten und dann mit 0 zu einer konstanten länge aufgefüllt. folgende funktionen habe ich verwendet.

RIGHT(paragraph, 1) = letzte zeichen eines strings

SUBSTRING(paragraph,1,length(paragraph -1) = alle zeichen eines strings ausser das letzte zeichen

FIND_IN_SET(RIGHT(paragraph,1),'1,2,3,4,5,6,7,8,9,0') = überprüft ob das letzte zeichen eine ziffer ist

in der lösung habe ich die sortierung als spalten mit ausgegeben. das muss man nicht machen, sondern köntnte es in die ORDER BY klausel übernehmen, dient aber der besseren übersicht.

SELECT id, paragraph, LPAD(IF(FIND_IN_SET(RIGHT(paragraph,1),'1,2,3,4,5,6,7,8,9,0'), paragraph, SUBSTRING(paragraph,1,length(paragraph -1))),5,'0') AS Sort, RIGHT(paragraph, 1) as Last
FROM
gesetze
ORDER BY Sort, Last

grundsätzlich ist es aber anzuraten, die paragraphen-zahl und den suffix(buchstaben) in zwei spalten aufzuteilen. das würde vorteile bringen.

Ilja