【问题标题】:In mysql, are DATE_ADD() and simply +/- INVERVAL different?在 mysql 中,DATE_ADD() 和简单的 +/- INTERVAL 不同吗?
【发布时间】:2021-05-21 22:03:35
【问题描述】:

我正在做一个 leetcode 问题 (https://leetcode.com/problems/new-users-daily-count/),我使用 date_add() 得到正确答案,但使用 -/+ 间隔得到错误答案。我以为我可以交互地使用它们,但现在似乎我需要始终使用 date_add()?

select date_add('2019-06-30', interval -90 day), cast("2019-06-30" as date) - interval 3 month

输出:

{"headers": ["date_add('2019-06-30', interval -90 day)", "cast(\"2019-06-30\" as date) - interval 3 month"], "values": [["2019-04-01", "2019-03-30"]]}

我使用 date_add 得到“2019-04-01”,但使用 -interval 得到“2019-03-30”。

【问题讨论】:

  • 如果您执行 EXPLAIN EXTENDED [your query] 后跟 SHOW WARNINGS,您可以看到这两个查询到底有多么不同
  • 请注意 interval -90 dayinterval -3 month 不同,您观察到的差异是由于这种差异。这不是因为使用 + INTERVALDATE_ADD
  • AHHHH 谢谢你指出我的愚蠢错误!!! @spencer7593

标签: mysql date dateadd dateinterval


【解决方案1】:

减去 3 个月几乎总是会得到与加上 -90 天不同的结果,因为 3 个月通常不是 90 天。如果您将 date_add 表单从

date_add('2019-06-30', interval -90 day)

date_add('2019-06-30', interval -3 months)

或从

更改您的 +/- 间隔形式
cast("2019-06-30" as date) - interval 3 month

cast("2019-06-30" as date) - interval 90 day

它们应该匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多