ORDER / SORT Смешанный номер столбца и номер с префиксом char

У меня есть столбец varchar, содержащий код, этот код может быть только числами или числом с префиксом char, например, у меня есть столбец, содержащий эти данные:

+------+
| Code |
+------+
|  1   |
|  C1  |
|  2   |
|  3   |
|  C3  |
|  F3  |
|  F1  |
|  F17 |
|  C9  |
|  C10 |
|  C47 |
| C100 |
| C134 |
| A234 |
|C1245 |
|   10 |
|  100 |
+------+

И так далее ...

Я хочу отсортировать этот столбец по следующим правилам:

  1. Только числовой код
  2. Префиксный код с алфавитно-цифровым порядком частей букв и числовой частью в порядке числа

Я хочу получить набор результатов, упорядоченный следующим образом:

+------+
| 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.

6
задан aleroot 20 April 2011 в 20:13
поделиться