MSSQL Sortirung aus String Feld mit Zahlen

ronnyw2302

Grünschnabel
Hallo!

Ich habe ein Problem. Ich muss eine Abrage in MS SQL machen und die Ausgabe dann nach größen sortieren.
Dabei geht es um Kartongs. Diese Kartongs haben verschiedene Größen. Diese sind wiederum im Artikeltext hinterlegt. Das sieht wie folgt aus.

"ZU, 300x600x200 Cont. versch."
"ZU, 400x600x300 versch. seitig"
...

Hierbei kann es natürlich auch mal sein, dass jemand leerstellen zwischen die x gemacht hat oder nach dem "," kein leerschritt gemacht hat.

die Frage ist, wie kann ich jetzt sagen, dass er dies nach größe sortieren soll. Sprich erst nach den ersten zahlen dann nach dem x die nächsten .....

Schon mal vielen Dank für eure Hilfe!
 
Hi

Du wirst den String zerlegen müssen in dem du Substrings bildest und nach diesen sortierst.

Aber:
Ich finde hier ist der Fehler schon beim Entwurf gemacht wurden.
Du versteckst mehere Informationen in einem Feld.
Das ist zum einen aus Entwurfssicht schlecht, zum anderen behindert es beim weiteren Nutzen der Daten (wie du ja grad merkst)
 
Danke für die schnelle Antwort.

Ich habe schon mit Substrings rum gebastelt. Nur bei Substrings habe ich nur Strings und leider kann ich daraus keine Zahl machen. Da es ja auch mal 4 stellige zahlen gibt. z. Bsp.

300x600x200
1400x600x300
....

daher muss ich aus den strings vom komma bis zum x lesen und die Leerzeichen links und rechts entfernen. Das geht schon mal leider nicht so einfach. ich bekomme die Leerzeichen nur von links oder von rechts weck. ich habe eine Abfrage gemacht die wie folgt aussieht.

Code:
Select SUBSTRing(artikel.bezeichnung,charindex(',',SUBSTRing(artikel.bezeichnung,1,30))+1, charindex('x',ltrim(Substring(artikel.bezeichnung,charindex(',',Substring(artikel.bezeichnung,1,30))+1,30)))) AS Alias

So jetzt kommen bei denen, wo kein Leerzeichen nach dem komma ist das x mit, da die Anzahl nicht mehr stimmt.
Das Sortieren funktioniert somit schonmal nicht nach der Anzahl.

Das der Fehler schon in der Entschtehen entstanden ist, ist mir klar. Allerdings ist das der Stand von der Firma schon von 1994 :) Jetzt alles um zu modscheln, das wäre sehr viel Aufwand, welcher jetzt schleichend übernommen wird. Allerdings muss ich jetzt die Abfragen machen und nicht irgendwann. Daher bitte entschuldigt diesen doofen Fehler der hier gemacht wurde.
 
Das der Fehler schon in der Entschtehen entstanden ist, ist mir klar. Allerdings ist das der Stand von der Firma schon von 1994 :) Jetzt alles um zu modscheln, das wäre sehr viel Aufwand, welcher jetzt schleichend übernommen wird. Allerdings muss ich jetzt die Abfragen machen und nicht irgendwann. Daher bitte entschuldigt diesen doofen Fehler der hier gemacht wurde.

- Ich würde es mal mit RegExp probieren. Allerdings weiss ich nicht, ob und wie diese im MSSQL unterstützt werden, da wirst du in die Doku guckem müssen. In Oracle würde dies etwa so aussehen (Müsstest du aber noch anpassen) :

--Aus deinem String "ZU, 300x600x200 Cont. versch." wird :

SELECT regexp_replace('ZU, 300x600x200 Cont. versch.','[^[:digit:]\x]') FROM dual;

-->300x600x200

Jetzt bist du schon mal den ganzen Gulasch los ausser den Ziffern und das X als Trennzeichen. Damit solltest du weiterkommen.

- Ausserdem müsstest du noch definieren, was den eigentlich "Grösse" heisst, nach dem du sortieren willst ...Volumen ? Grösste Länge ? ....?



Gruss
 
Zuletzt bearbeitet:
Danke für den Tipp.

Ich habe etwas rumgesucht und leider nichts gefunden, was hierbei mithalten kann. MSSQL bietet einfach nicht eine solchige Function. Kann mir vieleicht noch jemand eine gute Idee mitteilen?

Vielen Dank
 
Nun ja Convert in allen Ehren, aber wie ich schon sagte habe ich ja nicht nur Zahlen. und wenn ein character auftaucht bringt es schon fehler.
 
Zurück