2013-04-01 2 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

1

В зависимости от версии SQL Server вы используете, вы можете также быть в состоянии использовать EOMONTH() ... Я написал руководство, которое расщепляет варианты в различных вкусов SQL здесь: How to Find the Last Day of the Month in SQL, MySQL, PostgreSQL, and Teradata

+0

Спасибо за информацию! – PookPook

Смежные вопросы