Сортировка выборки строк по алфавитно-числовому кортежу

Интересует, каким образом можно реализовать, вроде как, незамысловатую задачу.

Есть список локаций. И заполняется он, приблизительно, такими значениями:

  • Баскетбольная площадка
  • Столовая
  • Шатёр #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.


Ответы (0 шт):