srob: In SQL Zahlen aus String erkennen

Beitrag lesen

Hi Thorsten,

Die Werte dieses Feldes können eine Zahl enthalten.
Beispiel: Profil2, Profil22.....
[...] daß die Daten in Reihenfolge der enthalten Zahlen [...]

besitzt der String vor den Zahlen eine konstante Länge? Dann könntest Du mit SUBSTRING() die Zahl herausoperieren[1]. Vor dem Ordnen mußt Du noch dafür sorgen, daß die ORDER-BY-Klausel auch tatsächlich Zahlen ordnet - das Ergebnis von SUBSTRING() ist ein String. Falls das Ganze auch in älteren MySQL-Varianten laufen soll, scheidet die CAST()-Funktion aus; ich wählte zur Umwandlung eine möglichst performante mathematische Funktion, vielleicht ABS() - sofern Deine Zahlen nicht negativ sein können...

SELECT blahx,ABS(SUBSTRING(blahy,n)) AS ordint
      FROM blah
      ORDER BY ordint;

Ein Bauchgefühl läßt mich die Funktionen nicht in die ORDER-BY-Klausel einfügen (was vermutlich auch fehlerfrei läuft); für mich gibt ORDER BY dem SELECT an, nach welcher _Ergebnisspalte_ zu sortieren ist. Als ich noch jung war, konnten die existierenden SQL-Dialekte auch keine Ausdrücke in dieser Klausel verarbeiten.

Ganz sicher stimme ich aber lulu weiter unten zu, daß Du mit dieser Tabellenstruktur gegen fundamentale Regeln des DB-Designs verstörst und eine Umstrukturierung dringen angeraten ist - von der mangelnden Eleganz und schlechten Performance einer Lösung wie o.a. einmal ganz zu schweigen!

hth Robert

[1] Andernfalls ließe sich möglicherweise ein höchst komplexer Suchausdruck formulieren - völliger Schwachsinn, dann ist wohl ein sofortiges Umstrukturieren angezeigt!