sql >> Databáze >  >> RDS >> Sqlserver

T-Sql - Seřadit podle na alfanumerické

Nejjednodušším řešením je vložit nuly

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

To však nebude zohledňovat alfa znaky. Abyste se mohli vypořádat s alfa postavami, musíte vědět, kolik potenciálních alfa postav můžete mít. Pokud existuje, můžete udělat něco jako:

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

DOPLNĚNÍ

Zkušební provoz:

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

Poznámka k mému řešení. Pokud má abecední znak (znaky) zvláštní význam, měli byste, jak navrhl Erick Robertson, rozdělit data do samostatných sloupců. Výše uvedené řešení zvládne pouze dva velmi specifické případy:celočíselnou hodnotu, hodnotu s jedním koncovým abecedním znakem. Pokud data mohou mít více abecedních znaků nebo je abecední znak někdy umístěn jinde než na konci hodnoty, mé řešení nebude fungovat. Kromě toho je třeba poznamenat, že moje řešení způsobí skenování tabulky pro vyhodnocení řetězce, který lze objednat na každé hodnotě.

Pokud to, co hledáte, je jednorázové rychlé řešení, můj přístup bude fungovat. Pokud hledáte dlouhodobé řešení, pak buď rozdělte data do samostatných sloupců, přijměte praštěné pořadí řazení nebo přidejte sloupec, který určuje relativní pořadí řazení pro každou hodnotu.



  1. Objednejte verze jako čísla

  2. mysqldump nefunguje v cronu

  3. Jak zjistím, kdy byla AKTUALIZACE MySQL úspěšná oproti skutečně aktualizovaným datům?

  4. Jak omezit řádky v sadě výsledků serveru SQL Server