如何在MS SQL中按时间顺序排序Buildingnumber?

时间:2014-10-30 08:46:05

标签: c# sql sql-server visual-studio

您好我需要按时间顺序订购建筑物清单。这是一个例子

select building from adress order by building asc 

结果:

Emil
G1
G10
G2
G3
G4
G5

我需要的是这个订单:

Emil
G1
G2
G3
G4
G5
G10
这可能吗?或者我应该创建一个优先级列表,我可以像优先级那样订购它?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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))