Най-лесното решение е да добавите предварително нули
Select ...
From Table
Order By Right( '0000000000' + YourColumn, 10)
Това обаче няма да отчита алфа знаците. За да се справите с алфа знаци, трябва да знаете колко потенциални алфа знаци може да имате. Ако има такъв, можете да направите нещо като:
Select ...
From #Test
Order By Case
When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
Else Right('0000000000' + NumVal, 10)
End
ДОПЪЛНЕНИЕ
Пробно изпълнение:
If object_id('tempdb..#Test') is not null
Drop Table #Test
Create Table #Test ( NumVal varchar(10) )
Insert #Test(NumVal) Values('02')
Insert #Test(NumVal) Values('03')
Insert #Test(NumVal) Values('1a')
Insert #Test(NumVal) Values('1b')
Insert #Test(NumVal) Values('10')
Insert #Test(NumVal) Values('11')
Select NumVal
From #Test
Order By Case
When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
Else Right('0000000000' + NumVal, 10)
End
Results:
1a
1b
02
03
10
11
Бележка за моето решение. Ако е така, че буквата(ите) има специално значение, тогава, както предложи Ерик Робъртсън, трябва да разделите данните в отделни колони. Горното решение ще се справи само с два много специфични случая:изцяло цифрова стойност, стойност с един знак в края на буквата. Ако данните може да имат множество азбучни знаци или азбучният знак понякога е позициониран различно от края на стойността, моето решение няма да работи. Освен това трябва да се отбележи, че моето решение ще предизвика сканиране на таблица, за да оцени подлежащия на поръчка низ за всяка стойност.
Ако това, което търсите, е еднократно бързо решение, тогава моят подход ще работи. Ако търсите дългосрочно решение, тогава или разделете данните на отделни колони, приемете шантавия ред на сортиране или добавете колона, която диктува относителния ред на сортиране за всяка стойност.