STD-00-1
STD-00-2
STD-00-10
STD-00-1(T)
STD-00-2(T)
STD-00-10(T)
STD-05-1
STD-05-2
STD-05-10
STD-05-1(T)
STD-05-2(T)
STD-05-10(T)
WIP-00-1
WIP-00-1(T)
实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
怎么样?
SELECT * FROM [TABLE] ORDER BY [COLUMN]
下次,请更具体一点。
答案 1 :(得分:2)
您必须解析部件并进行排序。示例查询使用您可以排序的数据创建字段v1, v2, ...
。 v1
包含STD
,v2
包含第一个数字,v3
如果(T)
存在则为1,v4
是第二个数字。外部查询然后使用这些字段进行排序,如:
select YourColumn
from (
select substring(YourColumn,1,3) as v1
, cast(substring(YourColumn,5,2) as int) as v2
, case when YourColumn like '%(T)%' then 1 else 0 end as v3
, cast(replace(substring(YourColumn,8,len(YourColumn)-7),'(T)','')
as int) as v4
, YourColumn
from YourTable
) sub
order by v1, v2, v3, v4
对于您的示例数据,返回:
v1 v2 v3 v4 YourColumn
STD 0 0 1 STD-00-1
STD 0 0 2 STD-00-2
STD 0 0 10 STD-00-10
STD 0 1 1 STD-00-1(T)
STD 0 1 2 STD-00-2(T)
STD 0 1 10 STD-00-10(T)
STD 5 0 1 STD-05-1
STD 5 0 2 STD-05-2
STD 5 0 10 STD-05-10
STD 5 1 1 STD-05-1(T)
STD 5 1 2 STD-05-2(T)
STD 5 1 10 STD-05-10(T)
WIP 0 0 1 WIP-00-1
WIP 0 1 1 WIP-00-1(T)
可能需要进行额外调整。
答案 2 :(得分:1)
最好的方法是你应该只在你的sql查询中实现。
select name from table_name ORDER By name
答案 3 :(得分:1)
@Andomar's answer如果您无法更改架构。
如果您可以更改架构,我建议最好的做的事情是:
-
分隔符并根据需要进行转换ORDER BY
列