Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

T-Sql - Zamów przez na alfanumerycznym

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalacja SQL Server 2017

  2. Prosta instrukcja aktualizacji, dzięki której wszystkie wiersze mają przypisaną inną wartość

  3. Jak korzystać z właściwości IDENTITY() w SQL Server

  4. Jak zmienić nazwę bazy danych w SQL Server — samouczek SQL Server / TSQL część 26

  5. Czy UNION ALL może być szybszy niż JOIN, czy moje JOIN są po prostu do bani?