Solusi termudah adalah dengan menambahkan angka nol
Select ...
From Table
Order By Right( '0000000000' + YourColumn, 10)
Namun, ini tidak akan memperhitungkan karakter alfa. Untuk menangani karakter alfa, maka Anda perlu mengetahui berapa banyak karakter alfa potensial yang mungkin Anda miliki. Jika ada, Anda dapat melakukan sesuatu seperti:
Select ...
From #Test
Order By Case
When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
Else Right('0000000000' + NumVal, 10)
End
TAMBAHAN
Uji coba:
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
Catatan tentang solusi saya. Jika karakter alfabet memiliki arti khusus, maka seperti yang disarankan Erick Robertson, Anda harus memecah data menjadi kolom terpisah. Solusi di atas hanya akan menangani dua kasus yang sangat spesifik:nilai numerik semua, nilai dengan karakter alfabet akhir tunggal. Jika data mungkin memiliki beberapa karakter alfabet atau karakter alfabet terkadang diposisikan selain nilai akhir, solusi saya tidak akan berfungsi. Selain itu, perlu dicatat bahwa solusi saya akan menyebabkan pemindaian tabel untuk mengevaluasi string yang dapat dipesan pada setiap nilai.
Jika apa yang Anda cari adalah solusi cepat satu kali, maka pendekatan saya akan berhasil. Jika Anda mencari solusi jangka panjang, pisahkan data menjadi kolom terpisah, terima urutan pengurutan yang konyol, atau tambahkan kolom yang menentukan urutan pengurutan relatif untuk setiap nilai.