2013-05-17 11 views
6

Mi dispiace per il mio errore, mi dovrebbe fornire il vero campione per la domanda, il mio ID incluso personaggi all'interno: codiceordine da SQL server 1.99.10 e 1.99.9

campione:

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 

e questo ID è del tipo nvarchar.

+2

L'output di sistema è il normale comportamento previsto durante l'ordinamento per valori di testo. Non sono numeri. Il carattere "1" precede il carattere "9". – Tim

+0

Segui questo link potresti avere un'idea ... http://stackoverflow.com/questions/119730/how-do-i-sort-a-varchar-column-in-sql-server-that-taintain-numbers – Pank

+0

possibile duplicato di [Come è possibile ordinare una colonna 'Numero versione' in genere utilizzando una query di SQL Server] (http://stackoverflow.com/questions/3474870/how-can-i-sort-a-version-number-column -generalmente-using-a-sql-server-query) – Pondlife

risposta

14

Yesterday c'era una domanda simile in cui ho imparato che è possibile utilizzare hierarchyid per la versione di ordinamento (se si utilizza almeno SQL-Server 2008):

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

DEMO

+0

Soluzioni corrette !! –

+2

Questo è un trucco ingegnoso! –

+0

grazie per aver segnalato il mio errore ... nella mia risposta ..... –

-2

è necessario ordinare dalla sottostringa della parte dopo ogni punto. Questa sarà una query SQL specifica per DB e dato che non hai menzionato quale stai usando, non posso dare un esempio SQL dettagliato.

Questo è come si può lanciare un decimali valori

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

La risposta di Tim è meglio ..

Ma io sto dando ancora una soluzione per i valori VARCHAR ordine -

SELECT id 
FROM student 
ORDER BY ID desc 
+2

Ciò non restituirebbe ciò che user2098512 vuole –

+0

Non è possibile invertire l'ordine solo perché il risultato di OP è stato ordinato errato. Ora stai sempre decrescente anche se l'ID sarebbe '1.99.8' e' 1.99.9'. Anche questo non è un ordinamento di versione. Provalo con '1.1.1' e' 2.1' che inizia con '2.1'. –

+2

Questa query è perfetta per ordinare in tipo varchar .... colonna – Pank