Si bien sé que ya tiene su propia respuesta aquí, creo que es pertinente entrar en detalles aquí.
En primer lugar, la cláusula order by
va por orden de columnas o expresiones especificadas. En este caso:
order by index asc, _date desc
Ese tipo de index
más pequeño al más grande (asc
final), y luego _date
más grande al más pequeño (desc
final). Mientras que asc
es el valor predeterminado, generalmente lo incluyo cuando tengo varias columnas que van en direcciones opuestas, como lo hace aquí.
También puede incluir expresiones en su order by
:
order by case when index < 0 then 1 else 0 end desc, _date desc
Esto pondría a todos los negativos index
filas en la parte superior, y luego ordenar los de _date
. Usar expresiones en su cláusula order by
es muy efectivo en ciertas circunstancias.
Ahora, usted mencionó collation, y una pequeña confusión en cuanto a qué es eso. La intercalación es la forma en que la base de datos trata el capital y los acentos en las comparaciones de cadenas. Con una intercalación Captial-Sensitive, 'abc' != 'ABC'
. Sin embargo, con una intercalación Insensible a la captura, 'abc' = 'ABC'
.
Debe tenerse en cuenta que la intercalación es no un juego de caracteres. Eso generalmente está determinado por el tipo de datos (varchar
== ASCII, nvarchar
== Unicode). La intercalación determina cómo se comparan las cadenas, no qué conjuntos de caracteres están disponibles para su uso.
Además, la intercalación también es importante con ciertos idiomas. Dada una intercalación latina, solo tiene que preocuparse por las mayúsculas y los acentos, pero dada una intercalación danesa, 'aa' = 'å'
. Por lo tanto, puede ver que la intercalación también juega un papel importante en la determinación de la ordenación y las comparaciones para diferentes idiomas.
La intercalación es muy importante al hacer el pedido, ya que determina cómo se ordenarán las cadenas dadas las diferentes mayúsculas y acentos. Es por eso que sigue apareciendo en tus búsquedas. La intercalación es importante, ¡e incluso affected StackOverflow esta semana!
: Gracias a Michael Madsen por señalar este ejemplo específico.
La recopilación no es solo una cuestión de comparar letras mayúsculas y acentos, sino que es ordenar los caracteres en general, incluyendo el tratamiento de secuencias de caracteres regulares como equivalentes a otros caracteres. Por ejemplo, en danés, "aa" sigue siendo una forma válida de escribir "å", aunque å es la última letra del alfabeto danés, por lo que usar una intercalación danesa ordenaría el texto en consecuencia (generalmente es correcto dado el idioma esperado, y la computadora no puede decidir por sí misma si se trata de un caso como la ciudad alemana de Aachen, donde aa obviamente no se usa como å). –
Gracias. Estoy bastante seguro de haber probado tu sugerencia de 'ordenar por índice asc, _ fecha desc', pero sin éxito. – jamesh
@jamesh: ¿De verdad? ¿Estás seguro? Porque eso funcionaría en casi todos los RDBMS disponibles. La única vez que pude pensar en dónde esto no funcionaría es si '_date' era un campo' varchar' en lugar de 'datetime'. Tal vez necesites encapsular 'index' con backticks, como' \ 'index \' '. – Eric