【问题标题】:How to get the First day and last day of the month from given month and year in sql如何在sql中从给定的月份和年份获取月份的第一天和最后一天
【发布时间】:2014-11-21 14:06:27
【问题描述】:

您好,我有一个月份和年份,例如:2014 年第 2 个月和第 2 年

我怎样才能得到那个月的第一天,比如 2014-02-01 和一个月的最后一天 2014-02-28?

我看过很多关于根据给定日期获取月份的第一个和最后一个日期的帖子,但我需要根据给定的月份和年份来获取它

提前致谢

【问题讨论】:

  • 您需要SQL标准、mysql方言还是mssql方言的答案?阅读您帖子的标签不清楚。
  • 有一个月的第一个日期不是“1”吗?!?!
  • 可能这就是MySql没有first_day函数的原因

标签: mysql sql sql-server sql-server-2008


【解决方案1】:

在 SQL Server 2012 及更高版本中

DECLARE @year int = 2014
DECLARE @month int = 12

SELECT 
DATEFROMPARTS ( @year, @month, 1) AS MonthStart,
EOMONTH (DATEFROMPARTS ( @year, @month, 1) ) AS MonthEnd

结果

MonthStart MonthEnd
---------- ----------
2014-12-01 2014-12-31

(1 row(s) affected)

更多详情 日期从零件:http://msdn.microsoft.com/en-gb/library/hh213228.aspx EOMONTH:http://msdn.microsoft.com/en-us/library/hh213020.aspx

【讨论】:

    【解决方案2】:

    在 MS SQL Server 2008 上,以下似乎有效:

    DECLARE @Month INT = 10;
    DECLARE @Year INT = 2016;
    DECLARE @FirstDayOfMonth DATETIME = CAST(@Year AS varchar) + '-' + CAST(@Month AS VARCHAR) + '-1';
    DECLARE @LastDayOfMonth DATETIME = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @FirstDayOfMonth) + 1, 0));
    
    SELECT @FirstDayOfMonth, @LastDayOfMonth; -- 2016-10-01, 2016-10-31
    

    【讨论】:

    • para el prime dia use otra sintaxis y todo ok DECLARE @FirstDayOfMonth DATETIME = '01/'+CAST(@Month AS varchar)+'/'+CAST(@Year AS varchar)
    【解决方案3】:

    在 mysql 中:

      SELECT DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)), 
                        INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS firstOfNextMonth,
               LAST_DAY(DATE_ADD(NOW(), 
                        INTERVAL 1 MONTH)) AS lastOfNextMonth
    

    在 sql 服务器中:

    select convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date'
    union all
    select  convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106)
    

    【讨论】:

      【解决方案4】:

      当月的第一天:

      SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)
      

      获取当月的最后一天:

      SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
      

      参考:Get first and last day of month in SQL 2012 and SQL 2008

      【讨论】:

        【解决方案5】:

        不是对 OP 的回答,但可能对其他人有帮助

        postgres 中的解决方案:

        SELECT to_date((2012 || '-' || 9)::text, 'YYYY-MM') AS first_day, 
               (to_date((2012 || '-' || 9)::text, 'YYYY-MM') + interval  '1 month' - interval '1 day')::date AS last_day
        

        【讨论】:

          【解决方案6】:

          不久前我遇到了同样的问题,所以我创建并保存了以下代码。您可以将GetDate() 替换为您自己的列名:

          Select 
          DATEADD(mm, DATEDIFF(mm, 0, Getdate())-1, 0)   as '1st day of last month',
          dateadd(day,-(day(Getdate())),Getdate())  as 'last day of last month',
          dateadd(mm,datediff(mm,0,Getdate()),0)as '1st day of this month',
          dateadd(dd,-1,dateadd(mm,Datediff(mm,0,Getdate())+1,0)) as 'last day of this month',
          dateadd(mm,datediff(mm,0,Getdate())+1,0) as '1st day of Next month',
          Dateadd(dd,-1,dateadd(mm,datediff(mm,0,Getdate())+2,0))as 'Last day of Next month',
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-29
            • 1970-01-01
            • 2011-11-24
            • 2019-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多