2013-04-01 152 views
0

如果我有本月的名字,那么我怎么能在SQL中的那个月的第一天和最后一天?查询当月的第一天和最后一天

我有这样的查询返回月份名称:

DECLARE @StartDate DATETIME, 
     @EndDate DATETIME; 

SELECT @StartDate = '20110501'   
     ,@EndDate = '20110801'; 


SELECT DATENAME(MONTH, DATEADD(MONTH, x.number, @StartDate)) AS MonthName 
FROM master.dbo.spt_values x 
WHERE x.type = 'P'   
AND  x.number <= DATEDIFF(MONTH, @StartDate, @EndDate) 

结果:

results

现在,我怎样才能得到的那几个月的第一天和最后一天?改变查询。

回答

3

试试这个: -

DECLARE @StartDate DATETIME, 
     @EndDate DATETIME; 

SELECT @StartDate = '20110501'   
     ,@EndDate = '20110801'; 


SELECT DATENAME(MONTH, DATEADD(MONTH, x.number, @StartDate)) AS MonthName, 
CONVERT(VARCHAR(25), 
DATEADD(dd,-(DAY(DATEADD(MONTH, x.number, @StartDate))-1),DATEADD(MONTH, x.number, @StartDate)),101) as FirstDay, 
CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,DATEADD(MONTH, x.number, @StartDate)))),DATEADD(mm,1,DATEADD(MONTH, x.number, @StartDate))),101) as LastDay 
FROM master..spt_values x 
WHERE x.type = 'P'   
AND  x.number <= DATEDIFF(MONTH, @StartDate, @EndDate) 

结果: -

MonthName  FirstDay   LastDay 
    May   05/01/2011  05/31/2011  
June   06/01/2011  06/30/2011  
July   07/01/2011  07/31/2011  
August   08/01/2011  08/31/2011  

结果得到采取的帮助下从this查询

+0

完善!谢谢... – PookPook

1

此代码为您提供了当月第一次约会:

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 

如果你知道本月然后数

SELECT  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + @MonthNumber, 0) 

也是一样月的结束日期

SELECT DATEADD(MILLISECOND, -1, 
     DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - @@MonthNumber+ 1, 0)) 
2

如果你想要一个更普遍和简单的解决方案:

DECLARE @startdate AS DATETIME = GETDATE() 
SELECT  
DATEADD(MONTH, DATEDIFF(MONTH, 0, @startdate) , 0) as startMonth, 
DATEADD(SECOND, -1, DATEADD(MONTH, 1, DATEADD(MONTH, DATEDIFF(MONTH, 0, @startdate) , 0))) as endMonth 

给出结果:

startMonth    endMonth 
----------------------- ----------------------- 
2013-06-01 00:00:00.000 2013-06-30 23:59:59.000 
+0

非常简单...谢谢 – PookPook

相关问题