В моей базе данных есть поле VARCHAR name
, которое содержит как символы, так и десятичные дроби для представления номеров версий программного обеспечения. Учитывая приведенные ниже примеры данных, как я могу упорядочить результаты в правильном порядке?
name
--------------------
Version 1.7
Version 1.8
Version 1.9
Version 1.10
Version 2.2
Version 3.0
Version 3.3
Проблема, по умолчанию, заключается в том, что упорядочение результатов только по name
приводит к результатампримерно так:
name
--------------------
Version 1.10
Version 1.7
Version 1.8
Version 1.9
Version 2.2
Version 3.0
Version 3.3
Об этом уже спрашивали в StackOverflow, и я прошел и проверил многие из предоставленных ответов, но безуспешно.Также трудно найти решение, которое работает для аналогичного набора результатов, а именно для комбинации буквенно-цифровых и десятичных чисел.
Я пробовал:
ORDER BY CAST(name AS INTEGER)
ORDER BY CAST(name AS DECIMAL)
ORDER BY CAST(name AS DECIMAL(4,2)
- same as above but CONVERT(name, [type])
ORDER BY ABS(name)
- some other things which have since slipped my mind :/
Замечания:
- Поле
name
не всегда имеет префикс «Version».Иногда это «Устаревший» или ряд других вещей. - Поле
name
не всегда содержит десятичные номера версий.Иногда это может быть само слово. - Поле
name
может также содержать такие элементы, как Plugin Name 2
и Go2URL
. - Проблемным элементом является «Версия 1.10».Все методы, которые я пробовал до сих пор, привели к тому, что этот элемент неуместен.
Обходной путь:
Я временно обошел эту проблемудобавив новое поле VARCHAR
с именем canonicalVersion
и сохранив канонический номер версии.Таким образом, 1.10.210
становится 0001.0010.0210.0000
и поэтому просто сортируется с ORDER BY canonicalVersion ASC
, и все элементы теперь находятся в правильном порядке.
Несмотря на то, что я обошел проблему сейчас, я все же хотел быувидеть решение исходного вопроса без добавления дополнительного поля.