1

我在 SQL Server 2014 中工作,需要从 SQL Server 准确计算一个月前DateTime,但我无法弄清楚如何DATEADD正确使用。

例子:

SELECT DATEADD(MONTH, -1, '20200229')

返回2020-01-29

SELECT DATEADD(MONTH, -1, '20200301')

返回2020-02-01

但是在第二个声明中,我想得到2020-01-30并且2020-01-31

有任何想法吗?

4

5 回答 5

4

似乎您想要上个月末,在这种情况下添加EOMONTH()到您的脚本中,如下所示

Select EOMONTH( DATEADD(MONTH,-1,'20200229'));

Select EOMONTH( DATEADD(MONTH,-1,'20200301'));
于 2019-08-30T17:35:43.987 回答
2

文档

如果以下情况属实:

  • datepart 是月份,日期月份的天数比返回月份的天数多
  • 返回月份中不存在日期日期

然后,DATEADD 返回返回月份的最后一天。

例如,九月有 30(三十)天;因此,这些语句返回 2006-09-30 00:00:00.000:

SELECT DATEADD(month, 1, '20060830');
SELECT DATEADD(month, 1, '20060831');
于 2019-08-30T17:37:26.920 回答
0

2020年是闰年。大多数时候你2/29无论如何都不会工作。也没有2/30 & 2/31所以1/30 & 1/31不会出现。

于 2019-08-30T17:44:27.863 回答
0

使用带有可选第二个参数的 EOMONTH() 函数,它是一个 int 并且是与日期相差的月数:

select eomonth('2020-02-29', -1);

回报:

2020-01-31
于 2019-08-30T17:59:41.177 回答
0

请试试这个。

SELECT DATEADD(DAY,1,DATEADD(MONTH, -1, '20200229')), DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, DATEADD(MONTH, -2, '20200301')) + 1, 0))
于 2019-09-01T04:19:28.733 回答