排序的時候將數據整理一下
'1'-----> '01'
'1.1'----->'01.01'
'10'----->'10'
'10.1'----->'10.01'

解决方案 »

  1.   

    創建一個排序的函數處理一下。create function func_reconbineStr(@str varchar(10))
    returns varchar(20)
    as
    begin
    declare @strInt int
    declare @strArg varchar(20)=''
    declare @charInt int=0
    set @strInt=charindex('.',@str,1)
    while(@strInt>0)
    begin
    set @charInt=@strInt-1
    if(@charInt<0)
    set @charInt=0
    set @strArg=@strArg+right('00'+substring(@str,1,@charInt),2)+'.'
    set @str=substring(@str,@strInt+1,len(@str))
    set @strInt=charindex('.',@str,1)
    end
    set @strArg=@strArg+right('00'+substring(@str,1,len(@str)),2)+'.'
    return @strArg
    endselect * from tablename order by dbo.func_reconbineStr(字段)
      

  2.   

    order by  convert(decimal(8,2),order) 
    这个不行吗?
      

  3.   

    IF OBJECT_ID('test') IS NOT NULL
    DROP TABLE test
    GOCREATE TABLE test
    (
      [Order] VARCHAR(16)
    )
    GOINSERT INTO test
    SELECT '5.1' UNION ALL
    SELECT '1' UNION ALL
    SELECT '20' UNION ALL
    SELECT '2.1.2' UNION ALL
    SELECT '10.1' UNION ALL
    SELECT '3.4.1.2.3'
    GOSELECT [Order] FROM test ORDER BY CAST(LEFT([Order],CHARINDEX('.',[Order])) + REPLACE(RIGHT([Order],LEN([Order]) -CHARINDEX('.',[Order])),'.','') AS DECIMAL(10,8)) 
    Order
    ----------------
    1
    2.1.2
    3.4.1.2.3
    5.1
    10.1
    20
      

  4.   

    肯定不行的啦,你看看他给的基础数据是有’2.1.2‘这个类型的数据,没法转换成decimal(8,2)这个类型的
      

  5.   

    感觉整个逻辑是按照。进行拆分成多列,然后进行ORDER BY 一次各个列就好了