最近的一個項目,使用存儲過程對報表進行分析,其中有一些名稱需要根據指定順序顯示,而其名稱對應的編號並不是按照要求的順序排列的。通過上網查找資料,發現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