有没有人有一段MYSQL代码可以给我一个星期一天的新日期时间,即一周中的同一天?
SELECT new_day = ADDDATE(new_day,INTERVAL 364 DAY) FROM my_table
适用于非闰年。任何想法如何最好地处理闰年?
答案 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是否最接近第一天,并选择相关,或什么也不做,并在几年后面对不准确。
* 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
。