Сортировка выборки строк по алфавитно-числовому кортежу
Интересует, каким образом можно реализовать, вроде как, незамысловатую задачу.
Есть список локаций. И заполняется он, приблизительно, такими значениями:
- Баскетбольная площадка
- Столовая
- Шатёр #1
- Шатёр #2
- Шатёр #3
- Шатёр #4
- Шатёр #5
- Шатёр #6
- Шатёр #7
- Шатёр #8
- Шатёр #9
- Шатёр #10
- Шатёр #11
Я не зря написал так много их, поскольку в этом и заключается загвоздка. В примере выше всё отсортировано так, как должно быть.
Если же написать стандартный код для сортировки:
select * from my_table order by name, то на выходе получим:
- Баскетбольная площадка
- Столовая
- Шатёр #1
- Шатёр #10
- Шатёр #11
- Шатёр #2
- Шатёр #3
- Шатёр #4
- Шатёр #5
- Шатёр #6
- Шатёр #7
- Шатёр #8
- Шатёр #9
Думаю, многие поняли причину этой проблемы. Order By сортирует это всё как строки, а вот людям это кажется совершенно нелогичным. Каким образом можно решить данную проблему? Рабочих примеров найти не удалось. Искал.
Кроме символа "#", иногда, могут указать "№", но это не учитывается в рамках задачи. Указываю такую информацию, на случай если будут предложения делить строку путём разреза, как это в PHP делается с помощью функции explode. Просто уже видел такие предложения в аналогичных вопросах на StackOverflow.