You can't just try to sort mixed data by "numeric value": string comparisons are always character-by-character, with the first character difference determining the result of the whole comparison - subsequent characters are not even inspected.
So a string comparison of even integer the numbers will not give you teh results you want:
1
10
11
...
19
2
20
21
...
To sort mixed data by numeric values within the string you will have to extract the numeric part, convert it to a number, then sort by that.
And since SQL string manipulation is at best poor, that's going to be a pretty messy job! I'd do it in the presentation language instead as the string manipulation functions are almost certain to be richer!
If you must sort by numeric content in SQL then I'd cheat: add a float column that contains the numeric part as a floating point value so the sort can be done from that and the analysis of the data is only needed on INSERT or UPDATE operations which happen a lot less often than SELECT.
[edit]
Oh, and then I'd use a Regex in the presentation language to extract the numeric value and convert it when I did the INSERT or UPDATE as again, it's probably easier there.
[/edit]