用我的试一试吧,我只在VF里试了,是可以的,不过只满足你目前的数据,通用型不好:(order by RIGHT("0"+序号,LEN(序号)-1)
--取第一字符串函数 create function gfs( @namestr varchar(100)) returns varchar(100) as begin declare @retstr varchar(100) if charindex('.',@namestr)=0 set @retstr=@namestr else set @retstr=substring(@namestr,1,charindex('.',@namestr)-1) return @retstr end go --取第二字符串函数 create function gss(@namestr varchar(100)) returns varchar(100) as begin declare @retstr varchar(100) if charindex('.',@namestr)=0 set @retstr='0' else set @retstr= stuff(@namestr,1,charindex('.',@namestr),'') return @retstr end go --语句: select * from tablename order by cast(dbo.gfs(s_name) as int),cast(dbo.gfs(dbo.gss(s_name)) as int),cast(dbo.gfs(dbo.gss(dbo.gss(s_name))) as int)
简单了 这样写 order by cast(left(rtrim(字段名)+'.0',charindex('.',rtrim(字段名)+'.0'))+ replace(right(rtrim(字段名)+'.0',len(rtrim(字段名)+'.0')-charindex('.',rtrim(字段名)+'.0')),'.','') as numeric(20,10))
例如,如果你的每级最多有3位的话 你可以用动态执行语句去做declare @s varchar(2000) select @s= ('select * from 你的表名 order by right(''00'+replace(你的字段名,'.',''',3)+right(''00')+''',3)') exec(@s)
那些数据最多只有两个"."
数据字段名为data 以下是 order by
convert(int,substring(data,1,charindex('.',RTRIM(data)+'.',1)-1)),
convert(int,
substring(
data,
charindex('.',RTRIM(data)+'.',1)+1,charindex('.',RTRIM(data)+'..',
charindex('.',RTRIM(data)+'.',1)+1)
-charindex('.',RTRIM(data)+'.',1)-1
))
编程序思路:问题的关键是 把数据(data)分开多个段由于SQLSERVER 里没有象FOXPRO的函数(AT)那样方便只有一个charindex函数 真是难为了如果 多几位就显得很长啦以上是我的看法!花了我成一个小时啊!请给我分!很穷啊!谢谢!
order by RIGHT("00"+序号,LEN(序号)-2)如果还有111.11.11这些情况,呵呵,那就更复杂了
应该行吧!!!
pmes(pmes) 你的语句也不全对,你看下面的排序: 11.5
11.5.2
12.6.5
12.6.2
12.6.3 就是用你所提供的语句的查询结果。(字段名为data ,类型为char)
create function gfs( @namestr varchar(100))
returns varchar(100)
as begin
declare @retstr varchar(100)
if charindex('.',@namestr)=0
set @retstr=@namestr
else
set @retstr=substring(@namestr,1,charindex('.',@namestr)-1)
return @retstr
end
go
--取第二字符串函数
create function gss(@namestr varchar(100))
returns varchar(100)
as
begin
declare @retstr varchar(100)
if charindex('.',@namestr)=0
set @retstr='0'
else
set @retstr= stuff(@namestr,1,charindex('.',@namestr),'')
return @retstr
end
go
--语句:
select * from tablename order by cast(dbo.gfs(s_name) as int),cast(dbo.gfs(dbo.gss(s_name)) as int),cast(dbo.gfs(dbo.gss(dbo.gss(s_name))) as int)
这样写
order by cast(left(rtrim(字段名)+'.0',charindex('.',rtrim(字段名)+'.0'))+
replace(right(rtrim(字段名)+'.0',len(rtrim(字段名)+'.0')-charindex('.',rtrim(字段名)+'.0')),'.','') as numeric(20,10))
你可以用动态执行语句去做declare @s varchar(2000)
select @s= ('select * from 你的表名 order by right(''00'+replace(你的字段名,'.',''',3)+right(''00')+''',3)')
exec(@s)