在MS SQL中订购街道地址

时间:2016-04-27 07:56:05

标签: sql-server

我遇到了一些SQL查询问题。我需要按街道地址订购select语句的结果。

我开始时:

SELECT * FROM addressTable ORDER BY streetAddress ASC

但这会返回

1 bob street 
10 bob street
2 bob street

为了纠正这个问题,我将声明改为:

SELECT * FROM database ORDER BY LEN(StreetAddress), StreetAddress ASC

我认为这是理想的,因为它现在正在回归:

1 bob street
2 bob street
10 bob street

然而,我没有预料到公寓和公寓号码,其格式为1a 1b 210a 210b等,所以我发现我的查询会像这样返回:

210 bob street
211 bob street
212 bob street
213 bob street
210a bob street
210b bob street

而不是:

210 bob street
210a bob street
210b bob street
211 bob street
212 bob street
213 bob street

我可以使用什么最简单的查询来实现这个目标?

1 个答案:

答案 0 :(得分:3)

试试这个:

ORDER BY CAST(LEFT(StreetAddress, PATINDEX('%[^0-9]%', StreetAddress)  - 1) AS INT),
         StreetAddress

我们的想法是提取前导数字值,将其转换为INT,按其排序,然后按字段本身排序。它应该工作,因为StreetAddress值与发布的值相似。