2014-10-30 18 views
0

你好,我需要按時間順序排列建築物列表。下面是一個例子如何訂購MS SQL中的Buildingnumber時間順序?

select building from adress order by building asc 

結果:

Emil 
G1 
G10 
G2 
G3 
G4 
G5 

我需要的是這樣的順序:

Emil 
G1 
G2 
G3 
G4 
G5 
G10 

這可能嗎?或者我應該創建一個優先級列表,在那裏我可以像優先級那樣訂購它?

+0

是有「大廈」列的任何特定的格式? – 2014-10-30 08:54:35

+0

不,它是隨機的。 – 2014-10-30 09:08:58

回答

2

我想你在數字前總是有一個字母。

這樣我就在你的信件(A,B,C ... G等)之前和建築物的號碼之前命令。

試試這個:

SELECT building 
FROM address 
ORDER BY SUBSTRING(building, 1, 1), CONVERT(int, SUBSTRING(building, 2, 100)) 

編輯

可以使用PATINDEX功能正則表達式(如勸here

SELECT building 
FROM address 
ORDER BY SUBSTRING(building, 1, PATINDEX('%[0-9]%', building) - 1), 
CONVERT(int, SUBSTRING(building, PATINDEX('%[0-9]%', building), 100)) 
+0

只有alpha分量是固定的 – daniele3004 2014-10-30 08:55:24

+0

@ daniele3004:是的,在我的答案的頭部我寫道:「我想你在數字前總是有一個字母。」 – 2014-10-30 08:56:30

+0

:-) yess ........我喜歡你的回答 – daniele3004 2014-10-30 08:59:33

1

這是一個經典:-)

我的建議,這就是我所做的。 每個表格都自動具有唯一的ID。

如果您的數據按順序插入,請使用訂購分子來訂購這些字段,這通常是表格的ID。

否則,您可以在表的單獨列中管理分子。

如果你的「G」組成部分是動態使用該解決方案

SELECT building 
FROM address 
ORDER BY ID_COLUMN_ORDER 

否則,如果你的組件「G」是固定使用這個

SELECT building 
FROM address 
ORDER BY SUBSTRING(building, 1, 1), CONVERT(int, SUBSTRING(building, 2, 100))