日期:2014-05-17  浏览次数:20483 次

这种排序怎么写.
这种排序怎么写.
表STR 中的strDesc列里不是固定的,但是里面总含有特定字符.

例如:
随便找了strDesc列中的几行
[Opt: +17] [Var: 27037768484] 
[Opt: +3] [Var: 202444813] 
[Opt: +1] [Var: 825] 
[Opt: +2] [Var: 825] 

我想写个排序,按照[Opt: + 后面这个数字大小排序该怎么写

------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (col nvarchar(100))
insert into [TB]
select '[Opt:+17] [Var:27037768484]' union all
select '[Opt:+3] [Var:202444813]' union all
select '[Opt:+1] [Var:825]' union all
select '[Opt:+2] [Var:825]'

select * from [TB]


SELECT * FROM TB 
ORDER BY CONVERT(INT,REPLACE(SUBSTRING(col,7,3),']',''))

/*
[Opt:+1] [Var:825]
[Opt:+2] [Var:825]
[Opt:+3] [Var:202444813]
[Opt:+17] [Var:27037768484]*/

------解决方案--------------------
SELECT * FROM @str ORDER BY Convert(int,substring(REPLACE(strDesc,'[Opt: +',''),0,charindex(']',REPLACE(strDesc,'[Opt: +',''))))

把@str 直接替换成你的表名,不可以直接执行吗?