Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-Sql - Pesan Berdasarkan Alfanumerik

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penguncian Optimis vs. Pesimis

  2. Masalah NHibernate Lancar dengan Nilai Kolom TANGGAL SQL Server 2008

  3. VB6 ADODB.Recordset RecordCount properti selalu mengembalikan -1

  4. Dapatkan hasil dari SQL dinamis dalam prosedur tersimpan

  5. Cara Menjalankan SQL Server 2017 &2019 Secara Bersamaan di Mac