MYSQL间隔 - 未来一年中的同一天

时间:2013-01-13 15:26:40

标签: mysql intervals

有没有人有一段MYSQL代码可以给我一个星期一天的新日期时间,即一周中的同一天?

SELECT new_day = ADDDATE(new_day,INTERVAL 364 DAY) FROM my_table

适用于非闰年。任何想法如何最好地处理闰年?

3 个答案:

答案 0 :(得分:3)

鉴于正常年份为52周和1天,闰年为52周和2天,您的新日期将比一年中提前一天或两天。对于常年的元旦之后的任何日期,或闰年1月2日之后的任何日期,添加52周或364天会给出明年的同一天的日期并发生本月提前1或2天(或上个月末)。

这使您无法解决一年中前两天的问题。据推测,“明年”至关重要,因此2013-12-31比2013-01-01晚52周的简单回答并不合适。在这种情况下,您必须编写一个条件表达式,在SQL中拼写CASE。

SELECT CASE WHEN YEAR(DATEADD(ref_date, INTERVAL 364 DAY)) = YEAR(ref_date)
       THEN DATEADD(ref_date, INTERVAL 371 DAY)
       ELSE DATEADD(ref_date, INTERVAL 364 DAY)
       END
  FROM ...wherever...

答案 1 :(得分:1)

您希望如何应对闰年?要么保存月份和日期,要比较364或371是否最接近第一天,并选择相关,或什么也不做,并在几年后面对不准确。

  • * saved_date *是基于它创建新日期之前的第一个日期
  • * pass_years *自第一个

    以来每增加一个新增量

    date_add(last_date,INTERVAL(dateiff的情况(date_add(saved_date,INTERVAL传递_年度),date_add(last_date,INTERVAL 371 DAY))< = 3然后371 else 364结束))DAY)

这个想法是要么在明年取52或53周。闰年不会对工作日产生影响,但它们会对已经存在的问题“做出贡献”;如果你每年只增加52周没有上述解决方案,那么每一年的日期会越来越低。

答案 2 :(得分:0)

为什么不简单

CURDATE() + INTERVAL 52 WEEK`

当然,它会在“日历”中提前1或2天。

mysql> SELECT NOW(), CURDATE() + INTERVAL 52 WEEK;
+---------------------+------------------------------+
| NOW()               | CURDATE() + INTERVAL 52 WEEK |
+---------------------+------------------------------+
| 2017-09-05 15:50:46 | 2018-09-04                   |
+---------------------+------------------------------+

如果您需要'以后',请使用53