sql - 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
解决方案
您可以通过 ASCII 订购:
SELECT doorno, ASCII(doorno) FROM testdata WHERE doorno ORDER BY ASCII(doorno)
参考: SQL 按 ascii 值排序
推荐阅读
- twilio - 来电的 Twilio 进行中状态回调
- javascript - 获取翻转时钟的当前面值
- python - 从 Python 而不是终端中提取 Firebase 用户
- postgresql - 如何在 DO 语句中使用准备好的语句?
- jquery - JQuery 每个迭代器跳过计数而不替换名称字段
- node.js - 在 ExpressJS 中禁用 CORS
- angular - 如何在Angular中将日期数组发送到REST API
- visual-studio - 如何使用 Visual Studio Community for Mac 为 Unity 创建托管插件
- android - 字体真棒文本在Android中并不稳固
- javascript - YouTube 嵌入式视频参数不起作用