【问题标题】:Mysql Subtract 'N' days to date value and compare to current date. N and Date are two column valuesMysql 减去“N”天的日期值并与当前日期进行比较。 N 和 Date 是两列值
【发布时间】:2019-12-15 22:10:59
【问题描述】:

我的表包含remind_me_befor_days 列和expiry_date 列。

我必须选择条件为(expiry_date - remind_me_befor_days) = current_date的记录。

如何通过查询来实现。任何人都可以帮助我吗? 提前致谢

【问题讨论】:

    标签: mysql sql date


    【解决方案1】:

    你可以做日期算术:

    select t.*
    from mytable t
    where t.expiry_date - interval t.remind_me_befor_days day = current_date
    

    Demo on DB Fiddle

    -- sample data
    select * from mytable;
    
    编号 |到期日期 |提醒我befor_days -: | :------------ | ------------------: 1 | 2019-12-25 | 10 2 | 2019-12-25 | 5
    -- query
    select t.*, current_date
    from mytable t
    where t.expiry_date - interval t.remind_me_befor_days day = current_date
    
    编号 |到期日期 |提醒我befor_days |当前的日期 -: | :------------ | -------------------: | :----------- 1 | 2019-12-25 | 10 | 2019-12-15

    【讨论】:

      【解决方案2】:

      要将其拆分为几个子问题,我们有:

      1. 查找当前日期。
      2. expiry_date 列中减去您的remind_me_befor_days 列值。
      3. 将其用作表中所需记录的过滤器。

      第一个可以使用 MySQL CURDATE() 函数完成。阅读更多here。将其与第二步和第三步相结合,您会得到类似的东西

      SELECT *
      FROM my_table
      WHERE expiry_date - remind_me_befor_days = CURDATE()
      

      【讨论】:

      • 感谢支持
      【解决方案3】:

      我强烈建议您将条件写成:

      where expiry_date = curdate() + interval remind_me_before_days day
      

      这是索引友好的,因此它可以使用expiry_date 上的索引。

      【讨论】:

      • @JobRajan 。 . .我回答是因为我认为这是最好的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      相关资源
      最近更新 更多