天天看点

ORDER BY CHARINDEX 语法

根据检索条件把检索结果排序。

1、order by中包含的条件在其他数据之前:

select * from 表名
where 列名 in ('条件1','条件2','条件3','条件4')
order by charindex(列名, '条件1,条件2,条件3')
           

2、order by中包含的条件在其他数据之后:

select * from 表名
where 列名 in ('条件1','条件2','条件3','条件4')
order by 
case when charindex(','+列名+',' ,','+'条件1,条件2,条件3,'+',')>=1 then 0 else 1 end
           

3、select * from table1 where id in (183,200,211,145,89,139,83,45) order by charindex(ltrim(id),'183,200,211,145,89,139,83,45')

每次查询出来的结果都变成了183,83,200,211,145,45,89,139 后两位相同的总是显示到一起去了,不知道为什么,请各位高手帮忙看看,数据可能会上万条.

select * from table1 where id in (183,200,211,145,89,139,83,45) order by
charindex(','+ltrim(id)+',',',183,200,211,145,89,139,83,45,')
           

前后加逗号限定

CHARINDEX

返回字符串中指定表达式的起始位置(第一个位置)。 

183,200,211,145,89,139,83,45

183 --> 1

83 --> 2:不会去找倒数第二个数83

强制找',83,'而不是'83',

4、order by charindex(bd_value ,'乒乓球,轮滑,排球,放放风方法,打散') 

现在想把bd_value 

中          乒乓球,轮滑,排球,放放风方法,打散

以外的排在他们后面怎么弄???

默认排到前面去了

DECLARE @TABLE TABLE(bd_value  VARCHAR(100))

INSERT INTO @TABLE
SELECT '乒乓球'
UNION ALL 
SELECT '轮滑'
UNION ALL
SELECT '排球'
UNION ALL
SELECT '放放风方法'
UNION ALL
SELECT '打散'
UNION ALL
SELECT '试验下行不行?'
UNION ALL
SELECT '我靠!'
UNION ALL
SELECT '真不行?'
UNION ALL
SELECT '行的嘛!'


SELECT * FROM  @TABLE
order by 
case when charindex(','+bd_value+',' ,','+'乒乓球,轮滑,排球,放放风方法,打散'+',')>=1 then 0 else 1 end,
charindex(','+bd_value+',' ,','+'乒乓球,轮滑,排球,放放风方法,打散'+',')

--------------结果
bd_value
乒乓球
轮滑
排球
放放风方法
打散
试验下行不行?
我靠!
真不行?
行的嘛!