In SQL Zahlen aus String erkennen
Turtle
- datenbank
Hallo Leute,
folgendes Problem:
Ich möchte Daten aus einer MySql-DB auslesen und sortieren.
Dabei habe ich ein Feld Name
.
Die Werte dieses Feldes können eine Zahl enthalten.
Beispiel: Profil2, Profil22.....
Jetz möchte ich, das die Daten in Reihenfolge der enthalten Zahlen ausgelesen werden.
Gibt es eine Funktion die das macht?
Der sql-Befehl sollte dann etwa so aussehen:
SELECT name
, beschreibung
FROM tabelle
ORDER BY zahl(name
)
Suchen in Dokus war bisher erfolglos.
Dank in vorraus und viele Grüsse aus Münster,
Thorsten
Huhu Thorsten
Dabei habe ich ein Feld
Name
.
Die Werte dieses Feldes können eine Zahl enthalten.
Beispiel: Profil2, Profil22.....
Du hast also zwei unterschiedliche Informationen in einem String stehen.
Das ist in der Regel ein Indiz für ein verbesserungswürdiges Datenbank-Design.
Das solltest Du also überdenken.
Viele Grüße
lulu
Hallo lulu,
ich weiss. Abes ist jetzt nun einmal so wie es hier ist.
Und davon muss ich ausgehen.
Trotzdem vielen dank,
Turtle
Hallo Leute,
vielen Dank für Eure Hilfe.
Das mein Ansatz von vornherein nicht elegant ist, dessen war und bin ich mir bewusst.
Mein Ansatz ist viel zu aufwendig.
Daher habe ich in meine Datentabelle ein Feld sort
eingefügt.
Beim Daten eingeben wird dann aus dem entsprechenden Feld mit einem reg. Ausdruck der enthaltene Zahlenwert gefiltert und in das Feld sort
eingefügt.
So ist es besser.
Viele Grüsse aus Münster,
Turtle
yo,
Gibt es eine Funktion die das macht?
ja, das bekommt man hin, wobei die lösung sehr stark davon abhängt, wie genau die einträge der spalte sind und welches dbms du benutzt. eine möglichkeit ist mit substr() funktion zu arbeiten, wenn du genau sagen kannst, an welcher stelle die zahl kommt. das wird in aller regel eher nicht der fall sein, und du musst das ganze mit anderen funktionen kombinieren. aber wie gesagt, welche die zur verfügung stehen, hängt von deinem dbms ab. am betsen ist, du gibst noch mal ein paar infos rüber bezüglich der spalte und deinem dbms.
ansonsten will ich dir ebenfals sehr, sehr stark ans herz legen, die beiden informationen zu trennen. besser vorher als später.
Ilja
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!