Преобразование текста в число в запросе MySQL

Можно ли преобразовать текст в число в запросе MySQL? У меня есть столбец с идентификатором, который содержит имя и номер в формате «имя-номер». Столбец имеет тип VARCHAR. Я хочу сортировать строки по числу (строки с тем же именем), но столбец сортируется в соответствии с порядком символа, т. Е.

name-1 name-11 name-12 name-2 

Если я сокращу число, могу ли я преобразовать число «varchar» в «реальный» номер и использовать его для сортировки строк? Я хотел бы получить следующий заказ.

 name-1 name-2 name-11 name-12 

Я не могу представить число как отдельный столбец.

отредактировал 2011-05-11 9:32

Я нашел следующее решение ... ORDER BY column * 1 . Если имя не будет содержать каких-либо номеров, сохранит ли это решение?

Это должно работать:

 SELECT field,CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num FROM table ORDER BY num; 

Вы можете использовать SUBSTRING и SUBSTRING :

 SELECT stuff FROM table WHERE conditions ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER); 

Где name_column – столбец со значениями «name-». SUBSTRING удаляет все до шестого символа (т. Е. Префикс «имя-префикс»), а затем CONVERT преобразует слева в действительное целое число.

ОБНОВЛЕНИЕ : Учитывая изменяющиеся обстоятельства в комментариях (т. Е. Префикс может быть любым), вам нужно бросить LOCATE в миксе:

 ORDER BY CONVERT(SUBSTRING(name_column, LOCATE('-', name_column) + 1), SIGNED INTEGER); 

Это, конечно, предполагает, что нечисловой префикс не имеет в нем дефис, но соответствующий комментарий говорит, что:

name может быть любой последовательностью букв

так что это должно быть безопасным предположением.

Вы можете использовать CAST () для преобразования из строки в int. например, SELECT CAST('123' AS INTEGER);

 SELECT *, CAST(SUBSTRING_INDEX(field, '-', -1) AS UNSIGNED) as num FROM tableName ORDER BY num; 

Чтобы получить номер, попробуйте с SUBSTRING_INDEX(field, '-', 1) затем конвертируйте.

если ваш первичный ключ является строкой в ​​формате, таком как

ABC / EFG / EE / 13/123 (порядковый номер)
эта строка может быть легко использована для сортировки с разделителем («/»)

мы можем использовать следующий запрос для заказа таблицы с этим типом ключа

 SELECT * FROM `TABLE_NAME` ORDER BY CONVERT(REVERSE(SUBSTRING(REVERSE(`key_column_name`), 1, LOCATE('/', REVERSE(`key_column_name`)) - 1)) , UNSIGNED INTEGER) DESC 

Просто используйте CAST,

 CAST(column_name AS UNSIGNED) 

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

 BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER] , BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER] , BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER] 

Общий способ:

 SELECT * FROM your_table ORDER BY LENTH(your_column) ASC, your_column ASC 

один простой способ SELECT '123' + 0