如何编写SQL实现按当前月份查询含跨新年周期的展示图片?
解决方案
逻辑说明
要覆盖跨年场景,只需要把时间范围拆为非跨年和跨年两类分别判断即可,所有符合条件的图片满足以下任意一条规则:
start_month值为0:直接命中全年展示规则- 非跨年周期(
start_month≤end_month):当前月份落在起始月到结束月的闭区间内 - 跨年周期(
start_month>end_month):当前月份大于等于起始月,或者小于等于结束月
最终查询语句
注意需要用括号明确逻辑优先级,避免运算顺序错误:
WHERE -- 全年展示 (`start_month` = 0) OR -- 非跨年场景匹配 (`start_month` <= `end_month` AND $month BETWEEN `start_month` AND `end_month`) OR -- 跨年场景匹配 (`start_month` > `end_month` AND ($month >= `start_month` OR $month <= `end_month`)) ORDER BY RAND()
效果验证(以当前月份11月为例)
- Image1.jpg(10月到次年3月):属于跨年场景,11≥10 匹配成功
- Image2.jpg(3月到10月):非跨年场景,11不在3-10区间 匹配失败
- Image3.jpg(7月到次年5月):属于跨年场景,11≥7 匹配成功
- Image4.jpg(全年展示):start_month=0 匹配成功
完全符合预期的展示规则。
内容的提问来源于stack exchange,提问作者Dawson Irvine
相关产品推荐
相关产品推荐

