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

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 这样肯定是不对的?请各位高手帮忙!
...全文
153 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-10 08:10
社区公告
暂无公告