高分求教,如何实现对机关发文的文件编号的正确排序?

javaboat 2006-03-10 08:10:41
假设SQL2000数据库中,有一表(doc),有一文本字段(列:markid),里面有下列数据,如何sql查询才能实现我想要的排序


外办发[2005]1号 外办发[2005]2号 外办发[2005]123号 外办发[2005]33号 外办发[2005]6号
外办发[2005]12号 外办发[2005]]50号

用怎么样的SQL语句(SQL200)才能实现这样的排序

外办发[2005]1号
外办发[2005]2号
外办发[2005]6号
外办发[2005]12号
外办发[2005]33号
外办发[2005]50号
外办发[2005]123号

select * from doc order by markid 这样肯定是不对的?请各位高手帮忙!
...全文
254 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaboat 2006-03-10
  • 打赏
  • 举报
回复
不好意思,我发得急了一些,
刚想修改一下,如果有下面的这些数据,不仅只有外办发

外办发[2005]1号 外办发[2005]2号 外办发[2005]123号 外办发[2005]33号 外办发[2005]6号
外办发[2005]12号 外办发[2005]]50号,外公明发[2005]3号,外公明发[2005]124号,外公明发[2005]23号,外传发[2005]5号,外传发[2005]22号,外传发[2005]125号,...

如何实现下面的正确排序
外办发[2005]1号
外办发[2005]2号
外办发[2005]6号
外办发[2005]12号
外办发[2005]33号
外办发[2005]50号
外办发[2005]123号
外传发[2005]5号
外传发[2005]22号
外传发[2005]125号
外公明发[2005]3号
外公明发[2005]23号
外公明发[2005]125号

麻烦各位朋友再帮一下忙..
谢谢..
ReViSion 2006-03-10
  • 打赏
  • 举报
回复
Create table #1(markid varchar(50))

insert #1
select '外办发[2005]1号'
union all select
'外办发[2005]2号'
union all select
'外办发[2005]6号'
union all select
'外办发[2005]12号'
union all select
'外办发[2005]33号'
union all select
'外办发[2005]50号'
union all select
'外办发[2005]123号'

select * from #1
order by left(markid,charindex(']',markid)),cast(left(substring(markid,charindex(']',markid)+1,10),patindex('%[^0-9]%',substring(markid,10,10))-1) as int)
ReViSion 2006-03-10
  • 打赏
  • 举报
回复
--下面这个更通用
select * from #1
order by left(markid,charindex(']',markid)),cast(left(substring(markid,10,10),patindex('%[^0-9]%',substring(markid,10,10))-1) as int)
lsqkeke 2006-03-10
  • 打赏
  • 举报
回复
declare @t table (markid varchar(50))

insert @t
select '外办发[2005]1号'
union all select
'外办发[2005]2号'
union all select
'外办发[2005]6号'
union all select
'外办发[2005]12号'
union all select
'外办发[2005]33号'
union all select
'外办发[2005]50号'
union all select
'外办发[2005]123号'

select * from @t
order by cast(left(right(markid,len(markid)-9),len(right(markid,len(markid)-9))-1) as int)

外办发[2005]1号
外办发[2005]2号
外办发[2005]6号
外办发[2005]12号
外办发[2005]33号
外办发[2005]50号
外办发[2005]123号
lsqkeke 2006-03-10
  • 打赏
  • 举报
回复
select * from doc
order by cast(left(right(markid,len(markid)-9),len(right(markid,len(markid)-9))-1) as int)
ReViSion 2006-03-10
  • 打赏
  • 举报
回复


Create table #1(markid varchar(50))

insert #1
select '外办发[2005]1号'
union all select
'外办发[2005]2号'
union all select
'外办发[2005]6号'
union all select
'外办发[2005]12号'
union all select
'外办发[2005]33号'
union all select
'外办发[2005]50号'
union all select
'外办发[2005]123号'

select * from #1
order by left(markid,9),cast(left(substring(markid,10,10),patindex('%[^0-9]%',substring(markid,10,10))-1) as int)

22,300

社区成员

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

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