2011-01-10 8 views
5

Ho una query SQL e ho bisogno di ordinare il risultato in ASC, ma ho bisogno che i numeri e gli spazi siano nell'ultima posizione del risultato, non prima.Ordinamento SQL per testo ASC, mostra numeri all'ultima posizione

SELECT title FROM movie ORDER BY title ASC 

Utilizzando il codice di cui sopra mi vengono i titoli a partire dal [spazio], 0-9, A, B, C ... Ho bisogno di questo modulo: A, B, C, ..., Z, [altro]

Grazie per qualsiasi aiuto.

risposta

6
ORDER BY CASE 
      WHEN LOWER(LEFT(title, 1)) BETWEEN 'a' AND 'z' THEN 0 
      ELSE 1 
     END, 
     title 
+0

L'unica modifica che ho apportato è che 'SINISTRA()' non è riconosciuto da Sqlite, ma ha funzionato meravigliosamente. –

1

Questo è un po 'un trucco, ma dovrebbe funzionare.

SELECT title FROM movie 
ORDER BY CASE WHEN title LIKE '[0-9]%' THEN 'ZZZ' + title ELSE title END ASC 

L'idea è di rendere la tua clausola di ordine trasformare gli articoli a partire dai numeri anteponendoli con ZZZ. Per quanto riguarda gli oggetti che iniziano con uno spazio, puoi semplicemente pulirli con LTRIM.

+0

Penso che la risposta di zerkms sia migliore e ti raccomando di seguire questa strada. Lascerò questo qui nel caso qualcuno volesse un'alternativa più grezza :-) –

+0

ok, la soluzione zerkmns funziona alla grande, grazie per il suggerimento LTRIM .. – gustyaquino