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)
實現此目的的最佳方法是什麼?SQL Statement sorting nvarchar
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)
實現此目的的最佳方法是什麼?SQL Statement sorting nvarchar
最好的辦法是,你應該只在你的SQL查詢中存檔。
select name from table_name ORDER By name
什麼
SELECT * FROM [TABLE] ORDER BY [COLUMN]
下一次,請更具體一點。
您必須解析零件並進行分類。示例查詢使用可以排序的數據創建字段v1, v2, ...
。 v1
包含STD
,v2
包含第一個數字,v3
爲1如果存在(T)
,並且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)
附加的調整可能是必需的。
@Andomar's answer如果您無法更改架構。
然而,如果你可以更改架構,我建議最好的事情是:
-
分離器和鑄造適當ORDER BY
當你想分類時,分開的列
這將在'STD-00-2'之前放置'STD-00-10' – Quassnoi 2010-05-17 12:26:18