2016-04-27 76 views
3

我在使用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,排序,然後排序:

+0

地址是否總是有街道號碼? –

+0

最簡單的就是從房屋編號信息中分離街道名稱。更復雜的是通常在代碼層中創建排序算法,並使用它來存儲排序鍵或只是在代碼中進行排序。 –

回答

3

試試這個。它應該提供的工作StreetAddress值是像發佈的。

+0

你在'-1'之前有一個過多的''''。 –

+1

@FelixPamittan感謝您的評論。我修復了它。 –

+0

謝謝!那完美的工作。我一直在研究這個過去的2個小時。 – PeterBiggerstaff