SQL сортировка по версии «число», строка различной длины - PullRequest
27 голосов
/ 09 февраля 2009

Я пытаюсь создать запрос SQL, который упорядочит результаты по номеру версии (например, 1.1, 4.5.10 и т. Д.)

Вот что я попробовал:

SELECT * FROM Requirements 
    WHERE Requirements.Release NOT LIKE '%Obsolete%' 
    ORDER BY Requirements.ReqNum

Теперь поле ReqNum является строковым полем, и, к сожалению, я не могу изменить его на число с плавающей точкой или что-то подобное, потому что у меня есть номера требований, такие как 162.1.11.

Когда я получу результаты обратно, я получу следующий заказ:

1.1
1.10
1.11
1.3

Как мне написать запрос, который будет сортировать по лексикографическому порядку?

... или

Как правильно отсортировать данные?

Спасибо за ввод заранее!

Ответы [ 21 ]

0 голосов
/ 09 февраля 2009

Вот пример запроса, который извлекает строку. Вы должны быть в состоянии использовать это либо в рефакторинге базы данных UPDATE, либо просто в своем запросе как есть. Однако я не уверен, как это вовремя; просто что-то, чтобы остерегаться и проверить.

SELECT SUBSTRING_INDEX("1.5.32",'.',1) AS MajorVersion,
  SUBSTRING_INDEX(SUBSTRING_INDEX("1.5.32",'.',-2),'.',1) AS MinorVersion,
  SUBSTRING_INDEX("1.5.32",'.',-1) AS Revision;

это вернет:

MajorVersion | MinorVersion | Revision
1            | 5            | 32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...