1

从当前日期减去年份时,如果当前日期February 28 2013低于语句返回February 28 2012,但正确的结果应该是February 29 20122012 年是闰年。这种情况如何处理。

SELECT DATEADD(year, -1, GETDATE())
4

3 回答 3

5

*使用此代码 *

SELECT DATE_SUB('2013-02-28', INTERVAL 365 DAY)
于 2013-05-07T09:59:00.700 回答
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。我们应该在这里使用什么逻辑?

于 2013-05-07T10:08:45.543 回答
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  |
+------+
于 2013-05-07T10:02:46.627 回答