У меня есть столбец varchar, содержащий код, этот код может быть только числами или числом с префиксом char, например, у меня есть столбец, содержащий эти данные:
+------+
| Code |
+------+
| 1 |
| C1 |
| 2 |
| 3 |
| C3 |
| F3 |
| F1 |
| F17 |
| C9 |
| C10 |
| C47 |
| C100 |
| C134 |
| A234 |
|C1245 |
| 10 |
| 100 |
+------+
И так далее ...
Я хочу отсортировать этот столбец по следующим правилам:
Я хочу получить набор результатов, упорядоченный следующим образом:
+------+
| Code |
+------+
| 1 |
| 2 |
| 3 |
| 10 |
| 100 |
| A234 |
| C1 |
| C3 |
| C9 |
| C10 |
| C47 |
| C100 |
| C134 |
|C1245 |
| F1 |
| F3 |
| F17 |
+------+
Как я могу получить набор результатов, упорядоченный по этим критериям? Я пробовал с таким запросом:
SELECT Code FROM Code_List ORDER BY case when Code like '%[a-z]%' then 99999999999999999999999999999999 else convert(decimal, Code) end
Но я получаю результат, который сначала упорядочивает номер, а затем номер с префиксом, но номер с префиксом альфа упорядочен как char, а не так, как я хочу ...
Единственная числовая запись должна быть упорядочена в соответствии с правилами числового порядка, а не порядка символов, поэтому, если единственной числовой записью является:
+------+
| Code |
+------+
| 1 |
| 47 |
| 2 |
| 3 |
| 6 |
| 100 |
| 112 |
| 10 |
Я хочу получить:
+------+
| Code |
+------+
| 1 |
| 2 |
| 3 |
| 6 |
| 10 |
| 47 |
| 100 |
| 112 |
База данных - это Microsoft SQL Server.