字段为 address
即根据地址排序 
但地址中的数据部分为 西直门北大街58号7号楼1001
西直门北大街58号7号楼1002
西直门北大街58号7号楼101
西直门北大街58号7号楼102
西直门北大街58号7号楼103
部分为  西直门北大街59号8号楼10-1001
西直门北大街59号8号楼10-1002
西直门北大街59号8号楼1-101
西直门北大街59号8号楼1-102
西直门北大街59号8号楼1-103如果单纯用order by address的话排序效果即为如上排序方法
 有没有什么方法可以使排序变为
西直门北大街58号7号楼101
西直门北大街58号7号楼102
西直门北大街58号7号楼103
西直门北大街58号7号楼201
...
西直门北大街58号7号楼1001
西直门北大街58号7号楼1002
西直门北大街59号8号楼1-101
西直门北大街59号8号楼1-102
西直门北大街59号8号楼1-103
西直门北大街59号8号楼2-101
...
西直门北大街59号8号楼10-1001
西直门北大街59号8号楼10-1002
这样子排序   sql应该怎么写呢?oracle排序楼号室号

解决方案 »

  1.   

    试试 select * from 表名 order by 字段名+0
      

  2.   


    order by 的时候 replace "-",这样不就可以了
      

  3.   


    order by 的时候 replace "-",这样不就可以了
    用替换的方式应该是正确的!
      

  4.   


      1  with a as(select '西直门北大街58号7号楼1001' col1 from dual
      2  union all
      3  select '西直门北大街58号7号楼102'  from dual
      4  union all
      5  select '西直门北大街59号8号楼10-1002'  from dual
      6  union all
      7  select '西直门北大街59号8号楼1-103'  from dual
      8  )
      9  select col1 from a
     10* order by to_number(substr(replace(col1,'-',''),instr(col1,'楼')-length(repl
    ace(col1,'-',''))))
    SQL> /COL1
    ----------------------------
    西直门北大街58号7号楼102
    西直门北大街58号7号楼1001
    西直门北大街59号8号楼1-103
    西直门北大街59号8号楼10-1002
      

  5.   

    with a as(select '西直门北大街8号7号楼1001' col1 from dual
      union all
      select '西直门北大街58号7号楼102'  from dual
      union all
      select '西直门北大街59号8号楼10-1002'  from dual
      union all
      select '西直门北大街59号18号楼1-103'  from dual
      )这样呢?