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

SQL Server 2008 - urutkan berdasarkan string dengan angka secara numerik

Anda dapat melakukannya menggunakan fungsi PATINDEX() seperti di bawah ini :

select * from Test 
order by CAST(SUBSTRING(Name + '0', PATINDEX('%[0-9]%', Name + '0'), LEN(Name + '0')) AS INT)

Demo Fiddle SQL

Jika Anda memiliki angka di tengah string maka Anda perlu membuat fungsi kecil yang ditentukan pengguna untuk mendapatkan nomor dari string dan mengurutkan data berdasarkan angka tersebut seperti di bawah ini :

CREATE FUNCTION dbo.fnGetNumberFromString (@strInput VARCHAR(255)) 
RETURNS VARCHAR(255) 
AS 
BEGIN 
    DECLARE @intNumber int 
    SET @intNumber = PATINDEX('%[^0-9]%', @strInput)

    WHILE @intNumber > 0
    BEGIN 
        SET @strInput = STUFF(@strInput, @intNumber, 1, '')
        SET @intNumber = PATINDEX('%[^0-9]%', @strInput)
    END 

    RETURN ISNULL(@strInput,0) 
END 
GO

Anda dapat mengurutkan data berdasarkan :

select Name from Test order by dbo.fnGetNumberFromString(Name), Name


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membatasi Baris dalam Kumpulan Hasil SQL Server

  2. Enkripsi Data Transparan (TDE) di SQL Server dalam Grup Ketersediaan AlwaysOn pada Contoh

  3. Bagaimana saya bisa memanggil Prosedur Tersimpan SQL menggunakan EntityFramework 7 dan Asp.Net 5

  4. SQL Server Express vs express localdb

  5. Bisakah kita meneruskan parameter ke tampilan di SQL?