2016-01-25 1 views
0

Мне нужно применить сортировку по алфавитно-цифровой и числовой сортировке.Алфавитно-цифровая и цифровая сортировка в SQL Server

Пример:

319, 
519, 
620, 
1154, 
1195, 
319lov, 
319, 
620lov 

мне нужно привести, как:

319, 
319, 
319lov, 
519, 
620, 
620lov, 
1154, 
1195, 

я применил следующий код для сортировки:

SELECT Name 
FROM TableName 
ORDER BY CAST(CASE 
       WHEN Name LIKE '[0-9][0-9][0-9][0-9]%' THEN LEFT(Name ,4) 
       WHEN Name LIKE '[0-9][0-9][0-9]%' THEN LEFT(Name ,3) 
       ELSE NULL 
       END AS INT) 

полученный результат, как:

319, 
319lov, 
319, 
519, 
620, 
620lov, 
1154, 
1195, 
+1

[http://stackoverflow.com/questions/16862147/sorting-varchar-column-with-alphanumeric-entries](http://stackoverflow.com/questions/16862147/sorting-varchar- column-with-alphanumeric-entries) – CoSpringsGuy

+0

после 'AS INT' 'просто добавьте', Name' – JamieD77

+0

@ JamieD77 Он работает хорошо. Спасибо –

ответ

0
SELECT name FROM t 
ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name; 

Вы заказываете все номера до первого не номера, буква находится там, чтобы обрабатывать все строки одинаково.

FIDDLE

+1

Нет, [counterexample] (https://data.stackexchange.com/stackoverflow/query/427747). – lad2025

+0

@ lad2025 Вы правы – Mihai

+0

Спасибо @Mihai Он работает хорошо сейчас. –

Смежные вопросы