2017-05-09 6 views
0

Ich habe eine Tabelle, die hat:ORDER BY DESC in Sybase

nb | label 
60 | from 2 and less 
25 | from 3 to 16 
15 | from 17 to 100 

Ich versuche, die absteigende Reihenfolge zu bekommen, damit ich die Abfrage verwenden:

select * from table order by label desc; 

Aber ich habe nicht das Recht Bestellung, stattdessen habe ich folgendes:

[ { nb: 25, label: 'from 3 to 16' }, 
    { nb: 60, label: 'from 2 and less' }, 
    { nb: 15, label: 'from 17 to 100' } ] 

Ist es 17 als 1 betrachten? Wie kann ich die richtige Bestellung bekommen?

Vielen Dank für Ihre Hilfe

+0

Extrahiere den Zahlenteil und wirf ihn in den Integer-Datentyp. – jarlh

+0

Wenn du 0 vor die 2 und 3 setzen kannst, wird es so sortiert, wie du es willst. Strings sortieren basierend auf dem ersten Zeichen, auf das sie treffen, also ist 3> 2> 1, es sieht nicht die 7 dahinter. Die 'from und space match' der ersten Varianz ist die 3,2,1 und ist in einer Zeichenkette korrekt sortiert. Füge die 0 hinzu oder wirf die Zahlen auf numerische Werte. – xQbert

Antwort

1

Dies ist ein Schmerz. Am einfachsten ist es, wenn Sie eine andere Spalte mit der gleichen Reihenfolge haben. Aber das zweite Wort unter der Annahme, eine ganze Zahl, die nicht mit 0 startet und das erste Wort ist „aus“:

order by patindex('%[0-9] %', label) desc, 
     left(label, patindex('%[0-9] %', label)) desc 

Dies findet im Wesentlichen die Länge der ersten Reihe und verwendet diese für den ersten Schlüssel in der order by. Dann bestellt es bei der ersten Nummer.

+0

Vielen Dank für Ihre Antwort, diese Antwort gibt die aufsteigende Reihenfolge, aber wenn ich: Bestellung von Patindex ('% [0-9]%', Label), Links (Label, Patindex ('% [0-9 ]% ', label)) desc es funktioniert nicht – Jean

+0

@Jean. . . Beide Tasten müssen 'desc' sein. –

1

Für eine schnelle Lösung, ändern Sie einfach, um es:

     ...from 03 to 16' }, 
     { nb: 60, label: 'from 02 and less' }, 
     { nb: 15, label: 'from 17 to 100' } ] 

oder mehr Raum statt Null:

     ...from 3 to 16' }, 
     { nb: 60, label: 'from 2 and less' }, 
     { nb: 15, label: 'from 17 to 100' } ] 

Beide sollten es die Art und Weise sortieren Sie wollen.

Verwandte Themen