2

如果我有月份的名称,我如何在 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)

结果:

结果

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

4

5 回答 5

6

如果您想要一个更通用和简单的解决方案:

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
于 2013-06-17T14:44:06.810 回答
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    

借助此查询获得的结果

于 2013-04-01T11:42:51.387 回答
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))
于 2013-04-01T11:43:24.277 回答
1

根据您使用的 SQL Server 版本,您可能还可以使用 EOMONTH()... 我在这里编写了一个指南,分解了各种 SQL 风格的选项:如何在 SQL 中查找本月的最后一天、MySQL、PostgreSQL 和 Teradata

于 2015-07-15T20:18:23.463 回答
0

这是一篇关于在 SQLServer 中使用 EOMonth 函数的非常好的文章,其中有很多很好的示例,并且以易于阅读的格式进行了布局。

https://www.tutorialsrack.com/articles/60/how-to-get-first-and-last-day-of-a-month-in-sql-server-using-eomonth-function

于 2021-01-21T18:06:40.500 回答