Как отсортировать значения varchar MySQL

0

У меня есть таблица с идентификатором (varchar) как

-----------------------------------------
ID        |NAME    |COLUMN1  |COLUMN2   |
-----------------------------------------
11.10     |abcd    |New col  | new col  |
11.10(a)  |abcd    |New col  | New Col 2|
11.50     |abcd    |New COl  | New coli | 
11.50(a1) |abcd    |New col  | New Col 2|
11.50(a2) |abcd    |New col  | New Col 2|
11.300(a) |abcd    |New col  | New Col 2|
11.200(a) |abcd    |New col  | New Col 2|
11.100(a) |abcd    |New col  | New Col 2|
11.40(a)  |abcd    |New col  | New Col 2|

Теперь, если я получаю отсортированные данные, используя:

Select * from table order by length(id) asc,id;

Я получаю результат, как

11.10
11.50
11.10(a)
11.100(a)
11.200(a)
11.300(a)
11.40(a)
11.50(a)
11.50(a1)

Но я хочу, чтобы

11.10
11.10(a)
11.40(a)
11.50
11.50(a)
11.50(a2)
11.200(a)
11.300(a)

Каким будет подходящий запрос для этого же? Я попытался использовать CAST, но я получаю желаемый результат.

Показать ещё 1 комментарий
Теги:
sql-order-by

3 ответа

2
Лучший ответ

Возможно, ваш желаемый запрос:

select ID           
  from Table_
 order by cast( SUBSTRING_INDEX(SUBSTRING_INDEX(id, '.',-1), '(', 1) as signed ),
                SUBSTRING_INDEX(SUBSTRING_INDEX(id, '(',-1), ')', 1);

Демо-версия SQL Fiddle

1

Для вашего примера вы можете просто использовать length():

order by length(id), id

Несколько более общий подход использует substring_index() и неявное преобразование:

order by substring_index(id, '.', 1) + 0,
         substring_index(id, '.', -1) + 0,
         id
0

Select Convert(Id,UNSIGNED INTEGER) AS num, col1, col2, col3 from Table Order By num Это работает как Oracle To_Number, поэтому я бы посоветовал, что это будет полезно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню