Сортировка данных, которые включают целые и множественные точки в varchar в MySQL

В моем проекте я храню документы в БД MySQL. Таблица содержит номер заголовка (t_nm) и заголовок. Я хочу перечислить эту таблицу в правильном порядке по номеру заголовка. Из-за данных, хранящихся в varchar, "SELECT * FROM table ORDER by t_nm" не работает должным образом.

Какой правильный запрос?

t_nm (varchar) заголовок (varchar)

+------+----------------------+
| t_nm | title                |
+------+----------------------+
| 0.1   | A.MANIVANNAN        |
| 1.0   | M.ELUMALAI          |
| 10.3  | SAMPATH.R           |
| 1.2   | S.PAULRAJ           |
| 1.2.1 | A.ASHOK KUMAR       |
| 2.1   | S.JAYAKUMAR         |
| 9.0   | S.CINRAS            |
| 10.1  | P.MURUGAN           |

Я хочу отсортировать эти данные в правильном порядке, подобном этому

+------+----------------------+
| t_nm | title                |
+------+----------------------+
| 0.1   | A.MANIVANNAN        |
| 1.0   | M.ELUMALAI          |
| 1.2   | S.PAULRAJ           |
| 1.2.1 | A.ASHOK KUMAR       |
| 2.1   | S.JAYAKUMAR         |
| 9.0   | S.CINRAS            |
| 10.1  | P.MURUGAN           |
| 10.3  | SAMPATH.R           |

person cancan    schedule 08.01.2016    source источник


Ответы (1)


У меня не установлен mySQL, поэтому я не могу проверить. Проверьте преобразование varchar в десятичное число перед сортировкой.

это должно выглядеть следующим образом: SELECT * FROM table ORDER by CAST(t_nmAS DECIMAL(10,6));

Обновление №1

Хорошо, затем взорвите его в массив с «.» в качестве разделителя как целое число

пример: SELECT * FROM table ORDER BY string_to_array(t_nmAS, '.')::int[] ASC

person wmehanna    schedule 08.01.2016
comment
t_nm не является десятичным из-за многоточия, подобного этому 1.2.1 - person cancan; 08.01.2016
comment
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ' '.'::int[] DESC' в строке 1 версии 5.5.32 - MySQL - person cancan; 08.01.2016