2016-04-04 10 views
-2

Ich suche eine Lösung für ein "Order by" -TSQL-Problem. definiere ich eine Spalte "Tag", die ich durch die folgenden Regeln bestellen möchten:
1. Kürzeste
2. Zahlen
3. Versalien-
4. Klein
5. SonderzeichenSQL - Sortieren nach - Sonderzeichen zuletzt

zB:
1. ACV
2. Adresse
3. Adresse
4. Admin
5. admins
6. AlertType
7. alertType1
8. alertType106
9. analysieren
10. analyse2
11. driving_time
12. driving_time2
13. Z_1111
14. __10__
15. __Login__

Wenn ich einfach "Bestellung per Tag" benutze, lautet die Ausgabe:
1. __10__
2. __Login__
3. ACV
4. Admin
5. admins
6. Adresse
7. Adresse
8. AlertType
9. alertType1
10. alertType106
11. analysieren
12. analyse2
13. driving_time
14. driving_time2
15. Z_1111

Es gibt ähnliche Fragen wie diese; Sort MySQL results alphabetically, but with numbers last

Kann ich RegEx verwenden, um meine Ausgabe zu filtern? Ich lese auch, dass Sie zwei Ausgänge haben und sie dann zusammenführen können. Wie kann ich das machen und welche dieser beiden Methoden ist besser (schneller)?

Antwort

0

Sie können versuchen, nächsten Code anwenden:

ORDER BY CASE WHEN ASCII(CAST(LEFT(tag,1) AS CHAR(1)) BETWEEN 65 AND 90 
    OR ASCII(CAST(LEFT(tag,1) AS CHAR(1)) BETWEEN 67 AND 122 THEN 0 ELSE 1 END, tag 
+0

Vielen Dank für die Antwort, aber es ist immer noch die falsche Reihenfolge. – Moarc