您好我需要按时间顺序订购建筑物清单。这是一个例子
select building from adress order by building asc
结果:
Emil
G1
G10
G2
G3
G4
G5
我需要的是这个订单:
Emil
G1
G2
G3
G4
G5
G10
这可能吗?或者我应该创建一个优先级列表,我可以像优先级那样订购它?
答案 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))