首页 > 解决方案 > SQL按升序对具有带符号的字母数字字符的数据进行排序

问题描述

DECLARE @mockup TABLE(SortThis VARCHAR(100));
INSERT INTO @mockup VALUES('0/A'),('1/1A1'),('1/10A1'),('002/10A'),
('1/2B4'),('1/2B22'),('2/a'),('2'),('3'),('3/a'),('2/12'),('3-10/ b'),('10'),('4'),
('10-2'), ('10(a)'), ('5-1/4'),('15 A'),('5-3/14B'),('19E/4'), ('31/1A'),('24');

--SELECT * FROM @mockup ORDER BY SortThis --alphanumerical sorting

SELECT m.SortThis
FROM @mockup m
CROSS APPLY(SELECT CAST('<x>' + REPLACE(SortThis,'/','</x><x>') + '</x>' AS XML)) A(Casted)
ORDER BY A.Casted.value('/x[1]/text()[1]','nvarchar(10)') --pick the first value as number
        ,A.Casted.value('/x[2]/text()[1]','nvarchar(10)') --pick the second number as string

----

从这里我想按升序排序,比如从提供的数据中排列 1 个系列,然后是 2 个系列,然后是 3 个系列。

预期输出: 1/10A1 1/1A1 1/2B22 1/2B4 2 2/12 2/a 3 3/a 3-10/ b 4 5-1/4 5-3/14B 10 10(a) 10-2 11 15 A 19E/4 31/1A

标签: sqlsql-servertsql

解决方案


您可以通过 ASCII 订购:

SELECT doorno, ASCII(doorno) FROM testdata WHERE doorno ORDER BY ASCII(doorno)

参考: SQL 按 ascii 值排序


推荐阅读