从当前日期减去年份时,如果当前日期February 28 2013
低于语句返回February 28 2012
,但正确的结果应该是February 29 2012
2012 年是闰年。这种情况如何处理。
SELECT DATEADD(year, -1, GETDATE())
从当前日期减去年份时,如果当前日期February 28 2013
低于语句返回February 28 2012
,但正确的结果应该是February 29 2012
2012 年是闰年。这种情况如何处理。
SELECT DATEADD(year, -1, GETDATE())
*使用此代码 *
SELECT DATE_SUB('2013-02-28', INTERVAL 365 DAY)
使用您的逻辑,您应该使用案例以不同的方式处理该月的最后一天。如果今天是该月的最后一天,那么它将是一年前该月的最后一天。
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。我们应该在这里使用什么逻辑?
好吧,这里有一些事情要考虑......
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 |
+------+