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
乒乓球
轮滑
排球
放放风方法
打散
试验下行不行?
我靠!
真不行?
行的嘛!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值