【问题标题】:DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) Can someone explain me thisDATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 有人能解释一下吗
【发布时间】:2012-07-26 08:17:39
【问题描述】:
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)

谁能解释一下。

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    这将为您提供给定日期的每月第一天

    内选 select DATEDIFF(MONTH, 0, GETDATE()) 将给出从 1900-01-01 开始的月份数

    这里是 1350

    这将被添加到 1900-01-01 ,但只有几个月

    select DATEADD(MONTH,1350,0) 将给出 2012-07-01 00:00:00.000

    这是当月的开始。

    我认为这是查找任何给定日期的月初的最有效方法。

    【讨论】:

      【解决方案2】:

      DateDiff 函数返回多少秒、多少个月、多少年 - 无论您在第一个日期(此处为 0)和第二个日期(此处为当前日期)之间指定的时间间隔。

           DATEDIFF(MONTH, 0, '2-14-2015')  --returns month. 0 is for 1/1/1900, and getdate is the current date 
           --(i used a set date bc dates will change as this post gets older).
           result: 1381
      

      在我的工作中,我使用了 2015 年 2 月 14 日的日期,它给了我自 1900 年 1 月 1 日以来的 1381 个月数。我像这样将 1381 放入 dateadd 函数中......

           select Dateadd(MONTH, 1381, 0)
           result: 2015-02-01 00:00:00.000
      

      基本上,它获取最内层公式的日期中指定的任何月份的第一天。

      我必须弄清楚的代码更进一步,并从该结果中减去 1 秒,以得到该月的最后一天 11:59:59,就像这样......

           select DATEADD(s, -1, '2015-02-01 00:00:00.000')
      

      所有的公式看起来像这样:

           DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0))
      

      希望这对某人有所帮助。 :)

      【讨论】:

        【解决方案3】:

        现在是本月的开始。它计算自 1900 年 1 月以来的月数,并将它们添加到 1900 年 1 月 1 日以获得当前月份的开始

        【讨论】:

        • 我一直以为把day设为1也能达到同样的效果,但要容易得多?
        【解决方案4】:
        The DATEDIFF will give you date diff in month from January 1 1900 to current date
        AND 
        The DATEADD will add (DATEDIFF) results months to your last parameter of DATEADD
        

        【讨论】:

          【解决方案5】:

          DATEADD 函数将时间间隔添加到您指定的日期。为了 例如,如果 SalesOrderHeader 表中所有订单的到期日期 滑了 3 天,您可以通过以下方式获取新的日期 声明:

          USE AdventureWorks;
          GO
          SELECT DATEADD(day, 3, DueDate)
          FROM Sales.SalesOrderHeader;
          GO
          

          DATEDIFF 函数计算日期部分中的时间段 在您指定的两个日期的第二个和第一个之间。换句话说, 它找到两个日期之间的间隔。结果是一个有符号整数 日期部分中的值等于 date2 - date1。以下查询使用 日期为 2001 年 11 月 30 日,并找出经过的天数 DueDate 和那个日期之间:

          USE AdventureWorks;
          GO
          SELECT DATEDIFF(day, DueDate, 'Nov 30 2001')
          FROM Sales.SalesOrderHeader;
          GO
          
          
          
          SELECT DATEDIFF(year, '20051220', '20060101')
          SELECT DATEDIFF(month, '20051220', '20060101')
          SELECT DATEDIFF(day, '20051220', '20060101')
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-12-26
            • 1970-01-01
            • 1970-01-01
            • 2018-10-09
            • 2022-11-20
            • 2015-07-21
            • 1970-01-01
            相关资源
            最近更新 更多