我有一年的库存数据,我想提取每个月数据的第一天和最后一天。做这个的最好方式是什么?谢谢

Nic*_*ick 1 sql-server

我有一年的库存数据,我想提取每个月数据的第一天和最后一天。做这个的最好方式是什么?

RLF*_*RLF 7

这是一个非常开放的描述,如果您使用的数据存在复杂性,可以使用更多详细信息。但这里有一个基本的想法。

一个月的第一天很简单:YYYYMM01

一个月的最后一天可以很容易地通过以下方式计算:

   DECLARE @FirstDayOfMonth DATETIME; -- Use DATETIME for older SQL Server versions
   SET @FirstDayOfMonth = '20150601' -- Safest format for dates.
   SELECT DATEADD(DAY,-1,(DATEADD(MONTH,1,@FirstDayOfMonth)));
Run Code Online (Sandbox Code Playgroud)

这使查找该月的最后一天变得轻而易举。是下个月的第一天的前一天。无需计算闰年、月长等。


Mar*_*son 7

继@RLF 的解决方案之后,SQL Server 2012及更高版本的每月最后一天的替代解决方案是使用新EOMONTH()函数。

如果您使用的是 SQL Server 2008 R2 或更低版本,这对您不起作用。

DECLARE @FirstDayOfMonth DATE; 
SET @FirstDayOfMonth = '20150601';
SELECT EOMONTH(@FirstDayOfMonth);
Run Code Online (Sandbox Code Playgroud)