【问题标题】:SQL Query to find the last day of the monthSQL 查询以查找该月的最后一天
【发布时间】:2013-05-14 20:06:31
【问题描述】:

我需要按以下格式查找一个月的最后一天:

"2013-05-31 00:00:00:000"

请大家帮忙。

【问题讨论】:

标签: sql-server sql-server-2005 date datetime


【解决方案1】:
declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);

【讨论】:

    【解决方案2】:

    试试这个 -

    CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
    (
        @Date DATETIME
    )
    RETURNS DATETIME
    AS
    BEGIN
    
        RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0))
    
    END
    

    查询:

    DECLARE @date DATETIME
    SELECT @date = '2013-05-31 15:04:10.027'
    
    SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0))
    

    输出:

    -----------------------
    2013-05-31 00:00:00.000
    

    【讨论】:

    • 请记住,如果您在 between 语句中使用它来获取(例如)给定月份的所有记录,这将排除最后一天的记录。您可能需要改用下个月的第一天。
    【解决方案3】:

    我知道这个问题是针对 SQL Server 2005 的,但我想我会提到 - 从 SQL 2012 开始,现在有一个 EOMONTH() 函数可以获取当月的最后一天。要以原始提问者指定的格式获取它,您必须将其转换为 datetime

    SELECT CAST(eomonth(GETDATE()) AS datetime)
    

    【讨论】:

      【解决方案4】:
      dateadd(month,1+datediff(month,0,getdate()),-1)
      

      检查运行:

      print dateadd(month,1+datediff(month,0,@date),-1)
      

      【讨论】:

        【解决方案5】:

        计算一个月的最后一个日期是相当简单的计算-

        1 - 使用 DATEDIFF 函数查找到今天为止的总月数 -

        Select DATEDIFF(MM,0,GETDATE())
        

        输出 - 1374,如果 getdate() 输出为“2014-07-23 19:33:46.850”

        2 - 总月数加 1 -

        Select DATEDIFF(MM,0,GETDATE())+1
        

        输出 - 1375,如果 getdate() 输出为“2014-07-23 19:33:46.850”

        3 - 获取下个月的第一个日期 -

        Select DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0)
        

        输出 - '2014-08-01 00:00:00.000',如果 getdate() 输出为“2014-07-23 19:33:46.850”

        4 - 下个月的第一个日期减去-1,返回当月的最后一个日期 -

        Select DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0))
        

        输出 - '2014-07-31 00:00:00.000',如果 getdate() 输出为“2014-07-23 19:33:46.850”

        同样的计算方式我们可以实现-

        1. 下个月的最后一天
        2. 上个月的最后一个日期 等等。

        【讨论】:

          【解决方案6】:

          SQL Server 2012 引入the eomonth function

          select eomonth('2013-05-31 00:00:00:000')
          -->
          2013-05-31
          

          【讨论】:

          • 他标记了sql-server-2005EOMONTH是2012年及以上
          【解决方案7】:
          Select DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),DATEADD(MONTH, 1, GETDATE()))
          

          这在 T-sql 中效果很好..

          将查询的GETDATE() 替换为您的列名。

          【讨论】:

            【解决方案8】:
            TO FIND 1ST and Last day of the Previous, Current and Next Month in Oracle SQL
            -----------------------------------------------------------------------------
            SELECT 
            SYSDATE,
            LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1 FDPM,
            LAST_DAY(ADD_MONTHS(SYSDATE,-1)) LDPM,
            LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1 FDCM,
            LAST_DAY(SYSDATE)LDCM,
            LAST_DAY(SYSDATE)+1 FDNM,
            LAST_DAY(LAST_DAY(SYSDATE)+1) LDNM
            FROM DUAL
            

            【讨论】:

            • 欢迎来到 StackOverflow!请考虑为您的代码添加一些解释。谢谢。
            • 问题被标记为sql-server,关于Oracle 的回答没有帮助。
            【解决方案9】:
            Declare @GivenDate datetime 
            Declare @ResultDate datetime 
            DEclare @EOMDate datetime 
            Declare @Day int 
            set @GivenDate=getdate() 
            set @GivenDate= (dateadd(mm,1,@GivenDate)) 
            set @Day =day(@GivenDate) 
            set @ResultDate=dateadd(dd,-@Day+1,@GivenDate) 
            select @EOMDate =dateadd(dd,-1 ,@ResultDate) 
            select @EOMDate 
            

            【讨论】:

              【解决方案10】:
              declare @date date=getdate()
              declare @st_date date,@end_dt date
              set @st_date=convert(varchar(5),year(@date))+'-'+convert(varchar(5),month(@date))+'-01'
              set @end_dt=DATEADD(day,-1, DATEADD(month,1,@st_date))
              ---------**************--------------
              select @st_date as [START DATE],@end_dt AS [END DATE]
              

              【讨论】:

                【解决方案11】:

                只是添加一个月和减去一天来创建报告的不同版本:

                例如:StartofMonth 是 '2019-10-01'

                dateadd(day,-1,dateadd(month,1,StartofMonth))

                EndOfMonth 将变为“2019-10-31”

                【讨论】:

                • 如果你想要一个日期列来代替 StartOfMonth 怎么办?您的查询是如何工作的?
                【解决方案12】:

                选择 DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-0, -1) LastDate

                【讨论】:

                  【解决方案13】:

                  我的绝妙方法。问候

                  DECLARE @MAXDATE INT=(SELECT MAX(DATEPART(YEAR,ORDERDATE)) FROM Orders)
                  DECLARE @MINDATE INT=(SELECT MIN(DATEPART(YEAR,ORDERDATE)) FROM Orders)
                  DECLARE @HORA INT=(SELECT MIN( DATEPART(HOUR,ORDERDATE)) FROM ORDERS)
                  DECLARE @DIA INT = 28
                  
                  SELECT Employees.EmployeeID , Orders. OrderID , OrderDate  FROM Employees
                  INNER JOIN Orders 
                  ON Employees.EmployeeID = Orders.EmployeeID
                  Where  (DATEPART(YEAR,ORDERDATE)) >=@mindate and  (DATEPART(YEAR,ORDERDATE))<= @maxdate
                  and DATEPART(HOUR,ORDERDATE)=@HORA   and DATEPART(DAY,ORDERDATE) IN (30,31) OR DATEADD(DAY,0,DATEPART(DAY,ORDERDATE))=28 AND
                  DATEADD(MONTH,0,DATEPART(MONTH,ORDERDATE))=2
                  ORDER BY 1 ASC
                  

                  【讨论】:

                    【解决方案14】:

                    在 Snowflake(以及可能的其他 SQL 引擎)中,您可以使用 LAST_DAY

                    select to_date('2015-05-08T23:39:20.123-07:00') as "DATE",
                           last_day("DATE", 'MONTH') as "LAST DAY OF MONTH";
                    

                    返回:

                    DATE         LAST DAY OF MONTH
                    2015-05-08          2015-05-31
                    

                    【讨论】:

                      【解决方案15】:

                      请尝试

                      SELECT CONVERT(DATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) AS lastDayOfMonth
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-11-08
                        • 1970-01-01
                        • 2023-03-11
                        • 2013-07-07
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多