SQL语句排序nvarchar
实现这一目标的最佳方式是什么 最好的方法是只在sql查询中获取SQL语句排序nvarchar,sql,Sql,实现这一目标的最佳方式是什么 最好的方法是只在sql查询中获取 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) 那怎么办 select name from table_name ORDER By name 下次,请更
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)
那怎么办
select name from table_name ORDER By name
下次,请更具体一点。您必须解析这些部分并进行排序。示例查询使用您可以排序的数据创建字段
v1、v2、…
v1
包含STD
,v2
包含第一个数字,v3
如果(T)
存在,则为1,v4
为第二个数字。外部查询然后使用这些字段进行排序,如:
SELECT * FROM [TABLE] ORDER BY [COLUMN]
对于示例数据,这将返回:
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
如果无法更改架构,则可能需要进行其他调整。
但是,如果您可以更改模式,我建议最好的做法是:
- 将不同的部分分成不同的列,并根据它们实际持有的数据适当地键入
- 为了维护现有的功能,有一个新的计算列作为它们的连接,并根据需要使用
分隔符和强制转换-
要排序时,请分别对列进行排序orderby
STD-00-10
放在STD-00-2
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)