Dashboard > СУБД > Home > MySQL, сортировка по столбцу смешанного типа > Просмотр
  СУБД Вход | Зарегистрироваться   Вариант для печати.  
  MySQL, сортировка по столбцу смешанного типа
Добавил(а) shixaro, последний раз редактировал(а) shixaro Mar 19, 2010
Метки: 
(None)

Задача: есть таблица, содержащая в одном из столбцов смешанные данные.

mysql> SELECT * FROM t;
+-------+--------+
| r1    | r2     |
+-------+--------+
| op1   | 123123 |
| op2   | 123123 |
| op200 | 123123 |
| op300 | 123123 |
| op100 | 123123 |
+-------+--------+
5 rows in set (0.00 sec)

Нужно получить данные с сортировкой по числам из столбца r1. Простой "order" по столбцу даст упорядочивание по тексту:

mysql> SELECT * FROM t ORDER BY r1;
+-------+--------+
| r1    | r2     |
+-------+--------+
| op1   | 123123 |
| op100 | 123123 |
| op2   | 123123 |
| op200 | 123123 |
| op300 | 123123 |
+-------+--------+
5 rows in set (0.00 sec)

Ввиду того, что формат достаточно строгий (всегда строка начинается с ^op), можно использовать функции для работы со строками, а также приведение типов:

mysql> SELECT * FROM t ORDER BY CAST( SUBSTRING(r1,3,LENGTH(r1)) AS decimal);
+-------+--------+
| r1    | r2     |
+-------+--------+
| op1   | 123123 |
| op2   | 123123 |
| op100 | 123123 |
| op200 | 123123 |
| op300 | 123123 |
+-------+--------+
5 rows in set (0.00 sec)

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами