您的位置:首页 > 数据库

sql语句使用case对过期时间进行排序

2015-04-15 09:55 405 查看
今天解决了一个非常有意思的SQL查询语句的问题,在这里与大家分享一下,并记录以后用到

先了解一下SQL中case的简单用法

--简单CASE函数-CASE某个值WHEN去匹配-THEN符合匹配条件的值-ELSE其他情况-END结束
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--CASE搜索函数-CASE在此处只当开启这一系列的语句固定的结构-WHEN使用条件判断-THEN符合条件判断的值-ELSE其他情况-END结束
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

首先说说业务场景,在一个数据表中我们存贮了展示在页面的一系列活动,一开始的要求是按照置顶在前和创建时间倒叙排序,最后又添加了举办过的活动自动排到没有举办的后面,经过几番尝试都不行,在试着使用case when语句进行排序的时候成功了,非常高兴,记录下来

--原需求查询语句
select * from activity a
order by a.topflag desc,a.createtime desc

--新需求查询语句
select * from activity a
order by case when a.starttime < now() then 0 else 1 end desc, a.topflag desc,a.createtime desc

语句分析,当活动开始时间小于现在的时间(活动已开始)给0值否则(活动没开始)给1值,然后desc倒序排序,从1到0从活动没开始的到活动已经开始的排序,case when a.starttime < now() then 0 else 1 end这一长串在SQL真正order by的时候已经被替换为0或者1了所以实际上是order by (0|1) desc, a.topflag desc,a.createtime desc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: