SQL返回上个月的第一天和当前月份@ 00:00:00

时间:2011-05-09 18:21:48

标签: sql

我正在使用此代码

declare @mydate datetime select @mydate = getdate()
declare @startdate varchar(20)  SELECT @StartDate = CONVERT(varchar(20),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))-1),DATEADD(mm,-1,@mydate)),120)
declare @enddate varchar(20) SELECT @EndDate = CONVERT(varchar(20),DATEADD(dd,-(DAY(@mydate)-1),@mydate),120)
Select @startdate as 'Start Date', @enddate as 'End Date'

确定报告的上一个月和当前月的第一天,但​​它会根据当前时间给出时间。我怎么才能得到

2011-04-01 00:00:00
&
2011-05-01 00:00:00

4 个答案:

答案 0 :(得分:31)

使用DATEADD/DATEDIFF trick:

SELECT
   DATEADD(month, DATEDIFF(month, 0, GETDATE())-1, 0),
   DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)

答案 1 :(得分:0)

您可以将上一个语句更改为下面的语句以获得结果:

Select SUBSTRING(@startdate,1,11) + '00:00:00' as 'Start Date', 
       SUBSTRING(@enddate,1,11)+ '00:00:00' as 'End Date'

答案 2 :(得分:0)

如果您使用的是MYSQL数据库

# First day of the previous month
SELECT concat(LAST_DAY(NOW() - INTERVAL 1 MONTH),' ','00:00:00') as 'PreviousMonthFirstDay';

# Last day of the previous month
SELECT concat(LAST_DAY(NOW() - INTERVAL 1 MONTH),' ','00:00:00') as 'PreviousMonthLastDay';

参考MySQL First day of previous month

答案 3 :(得分:0)

从SQL2012开始,引入了一个名为EOMONTH的新功能。使用此功能可以轻松找到该月的第一天和最后一天。

选择DATEADD(DD,1,EOMONTH(Getdate(), - 1))firstdayofmonth,EOMONTH(Getdate())lastdayofmonth