sql数字型字符串字段排序问题

xiongdingfu 2016-01-14 09:30:10
sql数字型字符串字段排序问题:
请将下面的数据的第一个字段,
先按第一个“-”前的数字进行排序(按数字大小顺序),
再按第一个后第二个“-”前的字符按数字进行排序(按数字大小顺序),
再将最后一段也按数字大小顺序排序。


16-1 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(一稿)
16-10 论近代重庆经济中心(謄清件)
16-10 论近代重庆经济中心(謄清件)
16-11 (第二节、工业中心的形式(謄清件))找不到全宗、暂放在此卷
16-2 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(二稿)
16-3 现代重庆、全国经济中心(第二章一稿)
16-4 论近代重庆经济决心(提纲)
16-5 近代重庆经济中心的初步形成(第一章 二稿)
16-6 近代重庆经济中心的初步形成(第一章 一稿)
16-7 重庆:中国长江上游的经济中心(一稿)
16-8 论近代重庆经济中心(打印件)
16-9 重庆:中国长江上游的经济中心(謄清件)(两份)
16-99 重庆城市经济发展特点
17-1 《中国近代史》授课开头语
17-10 《中国通史、中国近代史》复习要点
17-11 《中国近代史》(讲稿)(第1-3章)
17-11-1 《中国近代史》(讲稿)(第1-3章)
17-11-2 《中国近代史》(讲稿)(第1-3章)
17-11-3 《中国近代史》(讲稿)(第1-3章)
17-2 《中国近代史》授课的几点说明
17-3 中国近代史串讲纲目
17-4 读书笔记
17-5 《中国近代史》讲稿
17-6 《近代史》(讲稿)
17-7 《世界近代史》(听课笔记)
17-8 关于《中国革命史》教学安排
17-9 1985年大专理论班《中国通史》试题初稿
...全文
428 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-01-14
  • 打赏
  • 举报
回复
DECLARE @T TABLE(Col VARCHAR(100))
INSERT INTO @T
select '16-1 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(一稿)' union all
select '16-10 论近代重庆经济中心(謄清件)' union all
select '16-10 论近代重庆经济中心(謄清件)' UNION all
select '17-11-1 《中国近代史》(讲稿)(第1-3章)' union all
select '17-11-2 《中国近代史》(讲稿)(第1-3章)' union all
select '17-11-3 《中国近代史》(讲稿)(第1-3章)'


SELECT  Col
FROM    ( SELECT    *
                   ,Ord = REVERSE(REPLACE(LEFT(Col, PATINDEX('%[^0-9-]%', Col) - 1),
                                  '-', '.'))
          FROM      @T
        ) AS t
ORDER BY REVERSE(PARSENAME(Ord,1))*1,REVERSE(PARSENAME(Ord,2))*1,REVERSE(PARSENAME(Ord,3))*1


SELECT  Col
FROM    ( SELECT    *
                   ,Ord = LEFT(Col, PATINDEX('%[^0-9-]%', Col) - 1) + '---'
          FROM      @T
        ) AS t
ORDER BY LEFT(Ord, CHARINDEX('-', Ord) - 1) * 1
       ,SUBSTRING(Ord, CHARINDEX('-', Ord) + 1,
                  CHARINDEX('-', Ord, CHARINDEX('-', Ord) + 1) - CHARINDEX('-',
                                                              Ord) - 1) * 1
       ,RIGHT(Ord, CHARINDEX('-', REVERSE(Ord)) - 1) * 1

/*
Col
16-1 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(一稿)
16-10 论近代重庆经济中心(謄清件)
16-10 论近代重庆经济中心(謄清件)
17-11-1 《中国近代史》(讲稿)(第1-3章)
17-11-2 《中国近代史》(讲稿)(第1-3章)
17-11-3 《中国近代史》(讲稿)(第1-3章)
*/
道素 2016-01-14
  • 打赏
  • 举报
回复
简单的方法: 下面是将前面所有排序部分当字符串处理,再细点就是将这些值用-拆分转为数字再排序

WITH a(bookname) AS (
	SELECT N'17-10	《中国通史、中国近代史》复习要点' union
SELECT N'17-11	《中国近代史》(讲稿)(第1-3章)' union
SELECT N'17-11-1	《中国近代史》(讲稿)(第1-3章)' 
)
SELECT *,SUBSTRING(a.bookname,1,PATINDEX('%[^0-9,-]%',a.bookname))
FROM a ORDER BY SUBSTRING(a.bookname,1,PATINDEX('%[^0-9,-]%',a.bookname)) desc

spiritofdragon 2016-01-14
  • 打赏
  • 举报
回复
with t(s) as (
select '16-1 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(一稿)' union all
select '16-10 论近代重庆经济中心(謄清件)' union all
select '16-10 论近代重庆经济中心(謄清件)' union all
select '16-11 (第二节、工业中心的形式(謄清件))找不到全宗、暂放在此卷' union all
select '16-2 重庆经济和社会发展历史回顾--重庆经济中心形式及演进(提纲)(二稿)' union all
select '16-3 现代重庆、全国经济中心(第二章一稿)' union all
select '16-4 论近代重庆经济决心(提纲)' union all
select '16-5 近代重庆经济中心的初步形成(第一章 二稿)' union all
select '16-6 近代重庆经济中心的初步形成(第一章 一稿)' union all
select '16-7 重庆:中国长江上游的经济中心(一稿)' union all
select '16-8 论近代重庆经济中心(打印件)' union all
select '16-9 重庆:中国长江上游的经济中心(謄清件)(两份)' union all
select '16-99 重庆城市经济发展特点' union all
select '17-1 《中国近代史》授课开头语  ' union all
select '17-10 《中国通史、中国近代史》复习要点 ' union all
select '17-11 《中国近代史》(讲稿)(第1-3章)' union all
select '17-11-1 《中国近代史》(讲稿)(第1-3章)' union all
select '17-11-2 《中国近代史》(讲稿)(第1-3章)' union all
select '17-11-3 《中国近代史》(讲稿)(第1-3章)' union all
select '17-2 《中国近代史》授课的几点说明  ' union all
select '17-3 中国近代史串讲纲目   ' union all
select '17-4 读书笔记' union all
select '17-5 《中国近代史》讲稿   ' union all
select '17-6 《近代史》(讲稿)' union all
select '17-7 《世界近代史》(听课笔记) ' union all
select '17-8 关于《中国革命史》教学安排 ' union all
select '17-9 1985年大专理论班《中国通史》试题初稿  ' 
),tt as (
select 
	s,REPLACE(STUFF(t.s,charindex(' ',t.s),len(t.s),''),'-','.') s1
from t
)
select *
	,REVERSE(PARSENAME(REVERSE(tt.s1),1))*1 sort1
	,REVERSE(PARSENAME(REVERSE(tt.s1),2))*1 sort2
	,REVERSE(PARSENAME(REVERSE(tt.s1),3))*1 sort3
from tt
order by sort1,sort2,sort3

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧