首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL按升序对数据进行排序,其中包含带符号的字母数字字符

SQL按升序对数据进行排序,其中包含带符号的字母数字字符
EN

Stack Overflow用户
提问于 2018-12-05 19:37:23
回答 2查看 261关注 0票数 2
代码语言:javascript
运行
复制
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

EN

回答 2

Stack Overflow用户

发布于 2018-12-05 20:28:41

您可以按ASCII排序:

代码语言:javascript
运行
复制
SELECT doorno, ASCII(doorno) FROM testdata WHERE doorno ORDER BY ASCII(doorno)

参考:SQL Sorting by ascii values

票数 1
EN

Stack Overflow用户

发布于 2018-12-05 20:21:23

拆分字符串可能会有所帮助。因此您可以决定是将片段视为数字还是字符串(字母数字排序)。试试看:

代码语言:javascript
运行
复制
DECLARE @mockup TABLE(SortThis VARCHAR(100));
INSERT INTO @mockup VALUES('0/A'),('1/1A1'),('1/10A1'),('002/10A'),('1/2B4'),('1/2B22'),('1/A7');

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]','int') --pick the first value as number
        ,A.Casted.value('/x[2]/text()[1]','nvarchar(10)') --pick the second number as string
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53631424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档