SQL语句排序nvarchar

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 下次,请更

实现这一目标的最佳方式是什么

最好的方法是只在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

下次,请更具体一点。

您必须解析这些部分并进行排序。示例查询使用您可以排序的数据创建字段
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)