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

今天解决了一个非常有意思的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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值