Hallo Andrea,
x
0-120 V
0-15 V
0-300 V
0-35 V
0-70 V
wenn Du so sortieren möchtest, wie Du das angibst (und es ist einleuchtend, dass man so sortieren möchte), so ist grundsätzlich die Struktur der Tabelle ungünstig gewählt. Diese Spalte enthält gleich drei Informationen:
- Untergrenze
- Obergrenze
- Einheit
SELECT x FROM tabelle ORDER BY x
mit (oder ohne DESC)Möchte über die Spalte x sortieren.
ich verstehe Dich so, dass Du über die Obergrenze sortieren möchtest.
Ich hätte gern:
x0-15 V
0-35 V
0-70 V
0-120 V
0-300 VGibt es eine Möglichkeit, damit ich mein gewünschtes Ergebnis bekomme???
Ja, wie Hamstar bereits schrieb, solltest Du mit den Zeichenketten-Funktionen Deines Datenbankmanagementsystems und der CAST-Funktion zum Ziel kommen.
Da Du darauf mit "Verstehe leider kein Wort ;-(" antwortetest, vermute ich, dass Du noch Anfängerin bist. Dies vermute ich für den Umgang mit Datenbanken, dies vermute ich ebenso für den Umgang mit Programmiersprachen.
Nach den von Dir aufgeführten Beispielen bieten sich verschiedene Vorgehensweisen an, zum Beispiel:
1. Suche in der Spalte die Zeichenkette, die die Obergrenze bildet.
Dazu kannst Du z.B. SUBSTRING_INDEX() nutzen.
2. Wandle diese Zeichenkette mit CAST (s.o.) in eine Zahl um, denn Du
möchtest ja nach dem Wert der Obergrenze sortieren.
SUBSTRING_INDEX(x, ' ', 1) liefert Dir alles bis zum ersten Leerzeichen (hinter der Obergrenze)
x |SUBSTRING_INDEX(x, ' ', 1)|
--------|--------------------------|
0-15 V |0-15 |
0-35 V |0-35 |
0-70 V |0-70 |
0-120 V |0-120 |
0-300 V |0-300 |
Nun schneiden wir noch die Untergrenze und den Bindestrich weg. Dazu nutzen wir wiederum SUBSTRING_INDEX, diesmal mit Trennzeichen '-' und dem Index -1, weil wir an allem _rechts_ vom Trennzeichen interessiert sind. Wir füttern die Funktion mit dem Ausdruck aus dem ersten Schritt.
x |SUBSTRING_INDEX(x,' ', 1)|SUBSTRING(SUBSTRING_INDEX(x,' ', 1),'-',-1)
--------|-------------------------|-----------------------------------
0-15 V |0-15 |15
0-35 V |0-35 |35
0-70 V |0-70 |70
0-120 V |0-120 |120
0-300 V |0-300 |300
Im letzten Schritt wandeln wir das Ergebnis in eine Zahl um, ich gehe davon aus, dass es nur ganzzahlige Obergrenzen gibt :-)
x |CAST(SUBSTRING(SUBSTRING_INDEX(x,' ', 1),'-',-1) AS INTEGER)
--------|------------------------------------------------------------
0-15 V |15
0-35 V |35
0-70 V |70
0-120 V |120
0-300 V |300
Somit kannst Du Dein Statement schreiben zu
SELECT x
FROM tabelle
ORDER BY CAST(SUBSTRING(SUBSTRING_INDEX(x,' ', 1),'-',-1) AS INTEGER)
Wie Du Dir denken kannst, ist diese Sortierung alles andere als performant :-)
Es besteht weiter eine strikte Abhängigkeit davon, dass Leerzeichen genau so vorhanden sind wie in Deinem Beispiel angegeben. Deine Einträge könnten beispielsweise so aussehen
0 - 15 V
und Du hast die Leerzeichen als unwichtig angesehen. In diesem Fall funktioniert die von mir angegebene Lösung natürlich nicht, Du müsstest sie entsprechend modifizieren.
Grundsätzlich halte ich es nicht für eine gute Idee, Daten so wie von Dir beschrieben, zu speichern. Ganz gewiss nicht in Deinem Beispiel mit der Spalte x und der Obergrenze. Das könntest Du jetzt selbst einsehen.
Freundliche Grüße
Vinzenz