最近的一个项目,使用存储过程对报表进行分析,其中有一些名称需要根据指定顺序显示,而其名称对应的编号并不是按照要求的顺序排列的。通过上网查找资料,发现sql 中的charindex函数可以帮助解决这个问题。但是这样做也有一个弊端,当添加新的名称后,可能就会达不到想要的结果了,没有通用性。
给出一个例子:
create table test(
id1 varchar(10),
id2 varchar(10),
name varchar(20)
);
insert into test values('100','1001','ccc');
insert into test values('100','1002','bbb');
insert into test values('100','1003','aaa');
insert into test values('101','1010','fff');
insert into test values('101','1011','ddd');
insert into test values('101','1012','eee');
查询语句:
select * from dbo.test order by id1 ,CHARINDEX(id2,'1011,1012,1010,1003,1002,1001,');
查询结果如图所示
附 charindex函数说明(截自百度百科):
语法
CHARINDEX ( expression1 , expression2 , [ start_location ] )
参数
expression1
expression2
一个
表达式,通常是一个用于搜索指定序列的列。
expression2 属于字符串数据类型分类。
start_location
在
expression2 中搜索
expression1 时的起始
字符位置。如果没有给定
start_location,而是一个负数或零,则将从
expression2 的起始位置开始搜索。
返回类型
int