我在使用SQL查詢時遇到了一些問題。我需要按街道地址排列選擇語句的結果。在MS SQL中訂購街道地址
我開始:
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
什麼是我可以用來實現這個最簡單的查詢?由現場本身
ORDER BY CAST(LEFT(StreetAddress, PATINDEX('%[^0-9]%', StreetAddress) - 1) AS INT),
StreetAddress
的想法是提取領先的數字值,將其轉換爲INT
,排序,然後排序:
地址是否總是有街道號碼? –
最簡單的就是從房屋編號信息中分離街道名稱。更復雜的是通常在代碼層中創建排序算法,並使用它來存儲排序鍵或只是在代碼中進行排序。 –