对“混合值”字符串进行“数字”排序

时间:2013-01-11 04:58:38

标签: sql-server tsql sorting

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

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

有没有办法按照以下方式订购这些?

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

2 个答案:

答案 0 :(得分: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

Live Demo

答案 1 :(得分:0)

另一种方法

select * from tbl order by
stuff(val+'a',patindex('%[^0-9]%',val+'a'),len(val),'')*1