是字符型吗,就按字符的升序排就可以了
你直接...order by 序号

解决方案 »

  1.   

    假设
    那些数据最多只有两个"."
    数据字段名为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函数 真是难为了如果 多几位就显得很长啦以上是我的看法!花了我成一个小时啊!请给我分!很穷啊!谢谢!
      

  2.   

    order by RIGHT("0"+序号,LEN(序号)-1)假如还有111.1.1这种情况,就应该用
    order by RIGHT("00"+序号,LEN(序号)-2)如果还有111.11.11这些情况,呵呵,那就更复杂了
      

  3.   

    肯定是字符型的了,直接 order by 序号 asc
    应该行吧!!!
      

  4.   

    直接用order by 序号 不对!
      pmes(pmes) 你的语句也不全对,你看下面的排序:     11.5
         11.5.2
         12.6.5
         12.6.2
         12.6.3  就是用你所提供的语句的查询结果。(字段名为data ,类型为char)
       
      

  5.   

    用我的试一试吧,我只在VF里试了,是可以的,不过只满足你目前的数据,通用型不好:(order by RIGHT("0"+序号,LEN(序号)-1)
      

  6.   

    --取第一字符串函数
    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)
      

  7.   

    如果节点更多,就多用几个gss()
      

  8.   

    同意j9988的先按“.”的位置取出数据,每一部分按照长度排序,在同等长度时,在转换为int型,按照大小排序
      

  9.   

    简单了
    这样写
    order by cast(left(rtrim(字段名)+'.0',charindex('.',rtrim(字段名)+'.0'))+
    replace(right(rtrim(字段名)+'.0',len(rtrim(字段名)+'.0')-charindex('.',rtrim(字段名)+'.0')),'.','') as numeric(20,10))
      

  10.   

    例如,如果你的每级最多有3位的话
    你可以用动态执行语句去做declare @s varchar(2000)
    select @s= ('select * from 你的表名 order by right(''00'+replace(你的字段名,'.',''',3)+right(''00')+''',3)')
    exec(@s)