如果一列是varchar型,  里面  中文+数字+中文...  
order  by  的时候由于数字作为字符处理,排序会出现1,10,11,...2,20,21...,3,  
 
不知道如何解决,如:北京路25号,北京路2号,北京路2号群光百货1楼,北京路2号群光百货2楼,北京路2号群光百货10楼 
自己写不出来

解决方案 »

  1.   

    不太可能,最好加上一列OrderID,单独标记一条路上的不同门牌号
      

  2.   

    写个函数嘛create function fn_GetFirstNum(
    @s varchar(300)
    )
    returns int
    as
    begin
       if PATINDEX('%[0-9]%',@s)>0
           return cast(left(stuff(@s,1,PATINDEX('%[0-9]%',@s)-1,''),PATINDEX('%[^0-9]%',stuff(@s,1,PATINDEX('%[0-9]%',@s)-1,''))-1) as int)
       return 0
    end
    go你的可以
    select * from 你的表名
    order  by  dbo.fn_GetFirstNum(地址字段名)
      

  3.   

    可能这样更准确点select * from 你的表名
    order  by  left(地址字段名,PATINDEX('%[0-9]%',地址字段名)-1),     --北京路
    dbo.fn_GetFirstNum(地址字段名)                                    -- 25