|That's the correct sorting, for your data - the problem is deeper than that and probably requires changes elsewhere.
When you sort numbers, you expect this order: 1, 2, 3, ... 9, 10, 11, ... 19, 20 ...
But when you sort strings, the whole comparison is based on the first different pair of characters you encounter in the two strings. So if you compare "APPLE" with "APART"it does this:
1) Compare index : 'A' and 'A'. Same. Continue
2) Compare index : 'P' and 'P'. Same. Continue
3) Compare index : 'P' and 'A'. Different: Since 'A' is less than 'P' return the second string as the "lowest" value.
Indexes  and above aren't even looked at.
That's all fine and dandy, except if you are comparing string values and expecting numeric ordering, because the string ordering is used regardless of the string content and the order goes:
1, 10, 11, ... 19, 2, 20, 21, ... 29, 3, 30, ...
This problem gets even worse with date based string data!
So what you actually need to do is look to the source of your data and find out why it is a string rather than a numeric value, and correct that. Often, it's due to bad design in a DB where all the data is stored as strings because that was easy to do and caused no errors when bad numbers or bad dates where INSERTed - but the best way to fix this is to fix the DB design so you store numbers in numeric fields, and dates in date based fields.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!