2013-05-17 6 views
6

Tut mir leid, mein Fehler, ich die wirkliche Probe auf die Frage geben sollte, meine ID-Zeichen enthalten in:Auftrag von 1.99.10 und 1.99.9 SQL Server

Beispielcode:

select ID from student order by ID 

Expected output from mine   but system output 
-------------------------   ----------------- 
JAD.1.99.9        JAD.1.99.10 
JAD.1.99.10       JAD.1.99.9 

und Diese ID ist von nvarchar Typ.

+2

Die Systemausgabe ist das normale erwartete Verhalten beim Sortieren nach Textwerten. Sie sind keine Zahlen. Zeichen "1" steht vor dem Zeichen "9". – Tim

+0

Folgen Sie diesem Link möglicherweise erhalten Sie eine Idee ..http: //stackoverflow.com/questions/119730/how-do-i-sort-a-varchar-column-in-sql-server-that-contains-numbers – Pank

+0

mögliches Duplikat von [Wie sortiere ich eine Spalte 'Versionsnummer' generisch mit einer SQL Server-Abfrage] (http://stackoverflow.com/questions/3474870/how-can-i-sort-a-version-number-column -generisch-using-a-sql-server-Abfrage) – Pondlife

Antwort

14

Yesterday gab es eine ähnliche Frage, wo ich gelernt habe, dass Sie hierarchyid für Version verwenden können Sortierung (wenn Sie mindestens SQL-Server 2008 verwenden):

SELECT id 
FROM student 
ORDER BY Cast('/' + Replace(id, '.', '/') + '/' AS HIERARCHYID) 

DEMO

+0

Korrekte Lösungen !! –

+2

Das ist ein raffinierter Trick! –

+0

danke für den Hinweis auf meinen Fehler ... in meiner Antwort ..... –

-2

Sie bestellen müssen durch den Teilstring des Teils nach jedem Punkt. Dies wird eine DB-spezifische SQL-Abfrage sein und da Sie nicht erwähnt haben, welche Sie verwenden, kann ich kein detailliertes SQL-Beispiel geben.

Dies ist, wie man ein Dezimalstellen Werte werfen können

http://www.w3resource.com/sql/aggregate-functions/avg-decimal-places-using-cast-within-avg.php

Die Antwort von Tim besten ist ..

Aber ich gebe eine weitere Lösung für varchar Werte um -

SELECT id 
FROM student 
ORDER BY ID desc 
+2

Das würde nicht zurückgeben, was user2098512 will –

+0

Sie können die Reihenfolge nicht umkehren, nur weil OP Ergebnis falsch bestellt wurde. Jetzt sortieren Sie immer absteigend, auch wenn die IDs "1.99.8" und "1.99.9" sind. Dies ist auch keine Versionssortierung. Testen Sie es einfach mit '1.1.1' und' 2.1', die mit '2.1' beginnen. –

+2

Diese Abfrage ist perfekt für die Bestellung in Varchar-Typ .... Spalte – Pank