Показаны сообщения с ярлыком SQL. Показать все сообщения
Показаны сообщения с ярлыком SQL. Показать все сообщения

понедельник, 23 мая 2011 г.

Нестандартные сортировки

Привези ка мне батюшка чудище заморское цветочек аленький.


Как часто бывает в жизни что желания не совпадают с возможностями. Вот и по работе часто пожелания пользователей и чиновников не совпадают со стандартными  возможностями MS SQL Server. 
Пример: Необходимо отсортировать накладные для реестра по коду(хранится как строка) и дате выписки.

Допустим имеются следующие данные

Код              Дата
1/01              01/02/2011
2/01             05/02/2011
11/01           09/02/2011

На первый взгляд можно обойтись банальным ORDER BY, но тут по классике жанра начинают публиковаться пояснения, исключения и замечания.

Сортировать надо не по всему коду, а по части до "/" с приведением к числовому значению, т.к. 2 должно идти перед 11 а не наоборот, т.к. если сортировать как строку то получится порядок 1, 11, 2 вместо требуемого 1, 2, 11.

Ну а дальше начинаются субъективные факторы по типу "погоды на Марсе". 
Например если погода на Марсе ясная и накладная выписалась заданному клиенту, когда муха пролетая над кактусом потеряла ориентацию в пространстве и упала в кружку с чаем операциониста, то запись необходимо разместить в самом конце списка, независимо от того когда и с каким номеров эту накладную выписали.