当从当前日期减去一年时,如果当前日期为February 28 2013
,则下方语句返回February 28 2012
,但正确结果应为February 29 2012
,因为2012年为飞跃年。如何处理这种情况。
SELECT DATEADD(year, -1, GETDATE())
答案 0 :(得分:5)
* 使用此代码*
SELECT DATE_SUB('2013-02-28', INTERVAL 365 DAY)
答案 1 :(得分:0)
嗯,这是值得考虑的事情......
SELECT CASE WHEN DAY(LAST_DAY('2012-02-28'))=29 THEN 'foo' ELSE 'bar' END x;
+------+
| x |
+------+
| foo |
+------+
1 row in set (1.22 sec)
SELECT CASE WHEN DAY(LAST_DAY('2013-02-28'))=29 THEN 'foo' ELSE 'bar' END x;
+------+
| x |
+------+
| bar |
+------+
答案 2 :(得分:0)
使用您的逻辑,您应该使用案例以不同的方式处理该月的最后一天。如果今天是一个月的最后一天,它将是一年前的最后一天。
SELECT CASE WHEN LAST_DAY(CURDATE())=CURDATE()
THEN LAST_DAY(DATE_SUB(CURDATE(),INTERVAL 1 YEAR))
ELSE DATE_SUB(CURDATE(),INTERVAL 1 YEAR)
END
但如果今天是29.02你会怎么做?它应该是一年前的哪一天?在这种情况下,28.02和29.02一年前得到28.02。我们应该在这里使用什么逻辑?