微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SqlServer按照指定顺序对字段进行排序

最近的一个项目,使用存储过程对报表进行分析,其中有一些名称需要根据指定顺序显示,而其名称对应的编号并不是按照要求的顺序排列的。通过上网查找资料,发现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
一个 表达式,其中包含要寻找的 字符的次序。 expression1 是一个字符 数据类型分类表达式
expression2
表达式,通常是一个用于搜索指定序列的列。 expression2 属于字符串数据类型分类
start_location
在  expression2 中搜索  expression1 时的起始 字符位置。如果没有给定  start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索
返回类型
int

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐