我遇到了一些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
我可以使用什么最简单的查询来实现这个目标?
答案 0 :(得分:3)
试试这个:
ORDER BY CAST(LEFT(StreetAddress, PATINDEX('%[^0-9]%', StreetAddress) - 1) AS INT),
StreetAddress
我们的想法是提取前导数字值,将其转换为INT
,按其排序,然后按字段本身排序。它应该工作,因为StreetAddress
值与发布的值相似。