基于套餐计算广告剩余有效期的SQL查询问题求助
修正后的SQL查询方案
你的原查询问题在于:仅判断了套餐类型和whendt>0,但没有检查计算出的剩余天数是否为正。当剩余天数≤0时,依然会返回负数结果,不会触发ELSE分支的Expired。
以下是修正后的查询,核心逻辑是先计算对应套餐的到期日期,再判断剩余天数是否大于0:
SELECT business, whendt AS 'start date', CASE WHEN package = 'Monthly R100' THEN IF(DATEDIFF(whendt + INTERVAL 30 DAY, CURDATE()) > 0, DATEDIFF(whendt + INTERVAL 30 DAY, CURDATE()), 'Expired') WHEN package = 'Biannual R500' THEN IF(DATEDIFF(whendt + INTERVAL 180 DAY, CURDATE()) > 0, DATEDIFF(whendt + INTERVAL 180 DAY, CURDATE()), 'Expired') WHEN package = 'Yearly R1000' THEN IF(DATEDIFF(whendt + INTERVAL 365 DAY, CURDATE()) > 0, DATEDIFF(whendt + INTERVAL 365 DAY, CURDATE()), 'Expired') ELSE 'Expired' END AS Remaining_days_to_expire FROM directory;
关键调整说明
- 到期日期计算:直接以
whendt(开始日期)加上套餐对应的有效期天数得到广告到期日,逻辑更直观。 - 剩余天数判断:用
IF函数检查剩余天数是否大于0,大于0则显示天数,否则返回Expired。 - 统一异常处理:未知套餐或
whendt无效的情况,统一返回Expired。
内容的提问来源于stack exchange,提问作者Meagan May
相关产品推荐
相关产品推荐

