2016-09-17 2 views
1

Я собираюсь сортировать этот столбец, содержащий значение чисел и буквенно-цифровое значение.SQL Сортировка смешанных чисел и буквенно-цифровых значений

Но я получил неправильный вид (order by) может ли кто-нибудь помочь мне в решении этой проблемы?

Я использую SQL Server 2008 R2, вот пример:

DECLARE @TableTester TABLE (TESTER VARCHAR(50)); 

INSERT @TableTester VALUES 
('1'), 
('2'), 
('3'), 
('4'), 
('10'), 
('20'), 
('5 ; 6'), 
('122'), 
('256 ; 78'), 
('U1 ; U2'), 
('U3 ; 7'), 
('C1'), 
('U4'), 
('WC23'), 
('WC214 ; U4'), 
('U10'); 

SELECT Tester FROM @TableTester 
ORDER BY CASE WHEN PATINDEX('%[0-9]%', Tester) > 0 THEN 0 ELSE 1 END, 
CASE WHEN PATINDEX('%[0-9]%', Tester) > 0 
THEN LEFT(Tester, PATINDEX('%[0-9]%', Tester)-1) ELSE Tester END 

ВЫВОД:

1 
2 
3 
4 
10 
20 
5 ; 6 
122 
256 ; 78 
C1 
U4 
U10 
U1 ; U2 
U3 ; 7 
WC23 
WC214 ; U4 

DESIRED РЕЗУЛЬТАТ:

1 
2 
3 
4 
5 ; 6 
10 
20 
122 
256 ; 78 
C1 
U1 ; U2 
U3 ; 7 
U4 
U10 
WC23 
WC214 ; U4 
+0

Возможный дубликат [SQL Server 2008 - порядок по строкам с численным числом] (http://stackoverflow.com/questions/20240313/sql-server-2008-order-by-strings-with-number-numerically) – hatchet

+0

Кроме того, если ответы на дублированный вопрос трудно выполнить, есть следующее: http://www.essentialsql.com/use-sql-server-to-sort-alphanumeric-values/ – hatchet

+0

@hatchet, но у меня есть несколько значения в моей колонке, разделяющие точку с запятой ";" – itsMacyAnn

ответ

1

Еще раз, нормализовать данные - это упорядочение странно:

SELECT TESTER 
FROM @TableTester 
ORDER BY 
    CASE WHEN TESTER LIKE '[A-Z]%' THEN LEFT(TESTER,PATINDEX('%[0-9]%',TESTER)-1) ELSE NULL END, 
    CAST(
     CASE WHEN TESTER LIKE '%[0-9]%' 
       THEN REPLACE(SUBSTRING(TESTER,PATINDEX('%[0-9]%',TESTER),CHARINDEX(' ;',TESTER+' ;')-1),' ;','') 
       ELSE TESTER END 
         as int) 

Основная идея заключается в том, чтобы получить буквы и цифры, разделенные и чем использование отливать, чтобы сделать их целыми и сортировать первые буквами, чем целые.

+0

Он работает! Спасибо огромное ! :)) – itsMacyAnn