Хотя я знаю, что у вас уже есть свой собственный ответ, я думаю, что уместно вдаваться в подробности здесь.
Во-первых, предложение order by
приводится в порядке, указанном в столбцах или выражениях. В этом случае:
order by index asc, _date desc
Это сортирует по index
наименьшего к наибольшему (asc
окончание), а затем _date
наибольшего к наименьшему (desc
окончание). Хотя значение asc
является значением по умолчанию, я обычно включаю его, когда у меня несколько столбцов, идущих в противоположных направлениях, как вы здесь.
Вы можете также включить выражения в вашем order by
:
order by case when index < 0 then 1 else 0 end desc, _date desc
Это поставило бы все негативные index
строк в верхней части, а затем сортируют по тем _date
. Использование выражений в вашем предложении order by
очень эффективно при определенных обстоятельствах.
Теперь вы упомянули collation и немного путаницу относительно того, что это такое. Коллиляция - это то, как база данных обрабатывает капитал и акценты в сравнении строк. С Captial-Sensitive сортировкой, 'abc' != 'ABC'
. Тем не менее, с Captial-Insensitive collation, 'abc' = 'ABC'
.
Следует отметить, что сортировка не набор символов. Обычно это определяется типом данных (varchar
== ASCII, nvarchar
== Юникод). Collation определяет, как сравниваются строки, а не какие наборы символов доступны для использования.
Кроме того, сопоставление также важно с некоторыми языками. Учитывая латинское сопоставление, вам просто нужно беспокоиться о капитализации и акцентах, но, учитывая датскую сортировку, 'aa' = 'å'
. Итак, вы можете видеть, что сортировка играет большую роль в определении сортировки и сравнений для разных языков.
Сортировка очень важна при заказе, поскольку она определяет, как строки будут заказываться с учетом разных капитализаций и акцентов. Вот почему он продолжает появляться в ваших поисках. Важно отметить, что на этой неделе это будет affected StackOverflow!
: Спасибо Майклу Мэдсену за указание на этот конкретный пример.
Сортировка - это не только вопрос сравнения заглавных букв и акцентов, но и сортировка символов в целом, включая обработку последовательностей регулярных символов, эквивалентных некоторому другому персонажу. Например, на датском языке «aa» по-прежнему является действительным способом написания «å», хотя å является последней буквой в датском алфавите, поэтому использование датской сортировки соответствующим образом сортирует текст (обычно это правильно, учитывая ожидаемый язык, и компьютер не может принять решение о своем собственном, если это случай, подобный немецкому городу Аахен, где aa, очевидно, не используется как å). –
Спасибо. Я уверен, что я попробовал ваше предложение «заказать по индексу asc, _date desc', но без успеха. – jamesh
@ jamesh: Действительно? Ты уверен? Потому что это будет работать практически на всех РСУБД. Единственный раз, когда я мог думать о том, что это не сработает, является то, что '_date' было полем' varchar', а не 'datetime'. Возможно, вам нужно инкапсулировать 'index' с обратными тактами, такими как' \ 'index \' '. – Eric