SQL 混合数字和字母数字值排序

SQL Sort of mixed numbers and alphanumeric Value

我要对包含数字值和字母数字值的列进行排序。

但我的排序有误 (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

期望的结果:

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

再次规范化您的数据 - 这种排序很奇怪:

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)

主要思想是将字母和数字分开,然后使用转换使它们成为整数,并先按字母而不是整数排序。