2

我正在寻找一种对门牌号进行排序的方法。数字存储为字符串,虽然大多数是数字,但有些附加了一个字母。例如:

  • 1002
  • 29C
  • 1
  • 205
  • 105A

有没有办法按照下面的顺序订购这些?

  • 1
  • 29C
  • 105A
  • 205
  • 1002
4

2 回答 2

3

这就是你想要的:我希望你正在使用SQL SERVER

select * from tbl order by 
case when 
    PATINDEX('%[^0-9]%',val) = 0 
THEN 
    val
ELSE
    cast(Left(val,PATINDEX('%[^0-9]%',val)-1) as int) 
END

现场演示

于 2013-01-11T05:29:22.293 回答
0

另一种方法

select * from tbl order by
stuff(val+'a',patindex('%[^0-9]%',val+'a'),len(val),'')*1
于 2013-01-11T07:05:50.183 回答