У меня есть таблица с одним столбцом со следующими значениями.
|TestId|
--------
| F1 |
| F2 |
| F3 |
| A62 |
| F9 |
| DP45 |
| CAP78|
| F89 |
| F34 |
| F43 |
Мне нужно заказать их на основе их числовых частей.Так что в основном мне нужно получить
F1, F2, F3, F9, F34, F43, DP45, A62, CAP78, F89
Я пробовал приведенный ниже запрос, но получил неправильные результаты.
SELECT [TestId] FROM TestingOrder
ORDER BY LEN(TestId),TestId
Я получаю F1, F2, F3, F9, A62, F34, F43, F89, DP45, CAP78, что не то, что я хочу.
Как мне исправить это, чтобы получить заказНужен?
РЕДАКТИРОВАТЬ: Ответ предоставлен работает, если нет повторяющихся значений.Однако происходит сбой при наличии повторяющихся значений
Например:
|TestId|
--------
| F1 |
| F2 |
| F3 |
| A62 |
| F9 |
| DP45 |
| CAP78|
| F89 |
| F34 |
| F43 |
| F1 |
| F3 |
| F89 |
| F34 |
Я изменил ответ на этот
select TestId FROM
(SELECT DISTINCT TestId From TestingOrder) A
cross apply
( values ( convert(int,(substring(TestId, patindex('%[0-9]%', TestId), len(TestId))))) )tt(nos)
order by nos;
Результат изменится на F1, F2, F3,F34, F43, DP45, A62, CAP78, F89, F9