Mentre so che hai già la tua risposta qui, penso che sia pertinente entrare nei dettagli al lavoro qui.
Innanzitutto, la clausola order by
va in ordine di colonne o espressioni specificate. In questo caso:
order by index asc, _date desc
Quella sorta di index
piccolo al più grande (asc
finale), e poi _date
grande al più piccolo (desc
finale). Mentre asc
è il valore predefinito, generalmente lo includo quando ho più colonne che vanno in direzioni opposte, come fai qui.
È inoltre possibile includere espressioni contenute nel order by
:
order by case when index < 0 then 1 else 0 end desc, _date desc
Questo sarebbe mettere tutti i negativi index
righe in alto, e poi ordinare quelle di _date
. L'utilizzo di espressioni nella clausola order by
è molto efficace in determinate circostanze.
Ora, hai citato collation e un po 'di confusione su ciò che è. Le regole di confronto sono le modalità con cui il database tratta il capitale e gli accenti nei confronti delle stringhe. Con una fascicolazione sensibile alla captazione, 'abc' != 'ABC'
. Tuttavia, con una fascicolazione senza distinzione di tipo Captial, 'abc' = 'ABC'
.
Si noti che la fascicolazione è non un set di caratteri. Di solito è determinato dal tipo di dati (varchar
== ASCII, nvarchar
== Unicode). La fascicolazione determina come vengono confrontate le stringhe, non quali set di caratteri sono disponibili per l'uso.
Inoltre, le regole di confronto sono importanti anche in alcune lingue. Dato un collation latino, devi solo preoccuparti di capitalizzazione e accenti, ma dato un confronto danese, 'aa' = 'å'
. In questo modo è possibile vedere che le regole di confronto svolgono un ruolo importante nel determinare l'ordinamento e i confronti per lingue diverse.
La collazione è molto importante quando si ordina, perché determina come verranno ordinate le stringhe date diverse maiuscole e accenti. Ecco perché continua a venire nelle tue ricerche. La collazione è importante, e anche questa settimana è affected StackOverflow!
: Grazie a Michael Madsen per aver indicato questo esempio specifico.
La collazione non è solo una questione di confronto di lettere maiuscole e accenti, è l'ordinamento dei caratteri in generale, comprese le sequenze di caratteri regolari come equivalenti ad altri caratteri. Ad esempio, in danese, "aa" è ancora un modo valido per scrivere "å", anche se å è l'ultima lettera dell'alfabeto danese, quindi usare una collazione danese ordinerebbe il testo di conseguenza (di solito è corretto data la lingua prevista, e il computer non può decidere da solo se si tratta di un caso come la città tedesca di Aquisgrana, dove aa non è ovviamente usato come å). –
Grazie. Sono abbastanza sicuro di aver provato il tuo suggerimento di 'ordinare per indice asc, _date desc', ma senza successo. – jamesh
@jamesh: Davvero? Sei sicuro? Perché funzionerebbe su quasi tutti i RDBMS là fuori. L'unica volta che ho potuto pensare a dove questo non avrebbe funzionato è se '_date' fosse un campo' varchar' piuttosto che uno 'datetime'. Forse hai bisogno di incapsulare 'index' con i backtick, come' \ 'index \' '. – Eric