You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于套餐计算广告剩余有效期的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:56:12