Najłatwiejszym rozwiązaniem jest wpisanie zer na początku
Select ...
From Table
Order By Right( '0000000000' + YourColumn, 10)
Nie uwzględnia to jednak znaków alfa. Aby poradzić sobie z postaciami alfa, musisz wiedzieć, ile możesz mieć potencjalnych znaków alfa. Jeśli istnieje, możesz zrobić coś takiego:
Select ...
From #Test
Order By Case
When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
Else Right('0000000000' + NumVal, 10)
End
DODAT
Uruchomienie testowe:
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
Notatka o moim rozwiązaniu. Jeśli jest tak, że znaki alfabetyczne mają specjalne znaczenie, to jak zasugerował Erick Robertson, powinieneś podzielić dane na osobne kolumny. Powyższe rozwiązanie obsługuje tylko dwa bardzo specyficzne przypadki:wartość całkowicie liczbową, wartość z pojedynczym końcowym znakiem alfabetycznym. Jeśli dane mogą mieć wiele znaków alfabetycznych lub znak alfabetyczny jest czasami umieszczony w innym miejscu niż koniec wartości, moje rozwiązanie nie będzie działać. Ponadto należy zauważyć, że moje rozwiązanie spowoduje skanowanie tabeli w celu oceny ciągu z możliwością zamówienia dla każdej wartości.
Jeśli to, czego szukasz, jest jednorazowym szybkim rozwiązaniem, moje podejście zadziała. Jeśli szukasz rozwiązania długoterminowego, podziel dane na osobne kolumny, zaakceptuj głupkowaty porządek sortowania lub dodaj kolumnę, która dyktuje względny porządek sortowania dla każdej wartości.