Added a full code script here , but need to sort 1001 and 1002 before - as well.
We have total 5 solution , means 5 different queries as solution with full script.
=============================================================
SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = 'SYSTEM';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `varchar_sort`;
CREATE TABLE `varchar_sort` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`actual_user_id` varchar(200) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `varchar_sort` (`user_id`, `actual_user_id`) VALUES
(1, '1001-4'),
(2, '1001-1'),
(3, '1001-111'),
(4, '1002-1'),
(5, '1001-66'),
(6, '1001-100'),
(7, '1001-110');
SELECT user_id,actual_user_id,CONVERT(SUBSTRING_INDEX(actual_user_id,'-',-1),UNSIGNED INTEGER) AS num
FROM varchar_sort
ORDER BY num;
SELECT user_id,actual_user_id
FROM varchar_sort
ORDER BY CONVERT(SUBSTRING(actual_user_id, 6), SIGNED INTEGER);
SELECT user_id,actual_user_id
FROM varchar_sort
ORDER BY CONVERT(SUBSTRING(actual_user_id, LOCATE('-', actual_user_id) + 1), SIGNED INTEGER);
SELECT *, CAST(SUBSTRING_INDEX(actual_user_id, '-', -1) AS UNSIGNED) as num FROM varchar_sort ORDER BY num;
select * from varchar_sort order by convert( replace(actual_user_id, '-',''), SIGNED INTEGER ) asc
**Need to sort 1001 and 1002 as well.**