Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-Sql - Подреждане по буквено-цифрово

Най-лесното решение е да добавите предварително нули

Select ...
From Table
Order By Right( '0000000000' + YourColumn, 10)

Това обаче няма да отчита алфа знаците. За да се справите с алфа знаци, трябва да знаете колко потенциални алфа знаци може да имате. Ако има такъв, можете да направите нещо като:

Select ...
From #Test
Order By Case
    When IsNumeric(NumVal) = 1 Then Right('0000000000' + NumVal + '0', 10)
    Else Right('0000000000' + NumVal, 10)
    End

ДОПЪЛНЕНИЕ

Пробно изпълнение:

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

Бележка за моето решение. Ако е така, че буквата(ите) има специално значение, тогава, както предложи Ерик Робъртсън, трябва да разделите данните в отделни колони. Горното решение ще се справи само с два много специфични случая:изцяло цифрова стойност, стойност с един знак в края на буквата. Ако данните може да имат множество азбучни знаци или азбучният знак понякога е позициониран различно от края на стойността, моето решение няма да работи. Освен това трябва да се отбележи, че моето решение ще предизвика сканиране на таблица, за да оцени подлежащия на поръчка низ за всяка стойност.

Ако това, което търсите, е еднократно бързо решение, тогава моят подход ще работи. Ако търсите дългосрочно решение, тогава или разделете данните на отделни колони, приемете шантавия ред на сортиране или добавете колона, която диктува относителния ред на сортиране за всяка стойност.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проверете дали стойността на колоната съществува в друга колона в SQL

  2. 6 функции за получаване на ден, месец и година от дата в SQL Server

  3. Задайте опция 9 в съхранената процедура на SQL Server, като използвате WinHttp.WinHttpRequest.5.1 за TLS 1.2

  4. Как да инсталирате само компонента SQL Server Management Studio 2008

  5. Свържете две таблици, използвайте само последната стойност на дясната таблица