case 日期when 范围_mysql中case when中的比较 特别是日期的比较 要注意

我本来打算通过字段里面的starttime来确定用户是否禁言。那么这里希望在sql里面进行判断。于是按理成章写成下面的。

SELECT m.*,r.end_time,

CASE r.end_time

WHEN r.end_time > now() THEN '禁言一个月'

WHEN r.end_time = '2099-01-01 00:00:00'  THEN '永久禁言'

ELSE '正常'

END as forbit

from member as m

left join xxx_onoff as r

on m.id = r.object_id and r.object_type = 1但是 发现这样不是很可行

主要是这里 CASE r.end_time 这里如果带上字段名 则表示用这个字段名和when后面的值进行对比 如果相等 才返回它后面的Then 所以这里when后面的一个比较 比较的结果是1或者0 也就是bit类型 那么这里就会哟问题的。

SELECT m.*,r.end_time,

CASE

WHEN r.end_time = str_to_date('2099-01-01 00:00:00', '%Y-%m-%d %H:%i:%s') THEN '永久禁言'

WHEN r.end_time > now() THEN '禁言一个月'

ELSE '正常'

END as forbit

from member as m

left join xxx_onoff as r

on m.id = r.object_id and r.object_type = 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值