Joe*_*eph 37

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

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

这是1350

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

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

这是本月的开始.

我认为这是找到任何特定日期的月份开始的最有效方法.


Rai*_*der 10

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
Run Code Online (Sandbox Code Playgroud)

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

     select Dateadd(MONTH, 1381, 0)
     result: 2015-02-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

基本上,它是在最里面的公式的日期中指定的任何月份的第一天.

我不得不弄清楚的代码更进了一步,从那个结果中减去了1秒钟,以便在11:59:59这个月的最后一天得到...

     select DATEADD(s, -1, '2015-02-01 00:00:00.000')
Run Code Online (Sandbox Code Playgroud)

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

     DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0))
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.:)


pod*_*ska 2

本月伊始。它计算自 1900 年 1 月以来的月数,并将其与 1900 年 1 月 1 日相加以获得当月的开始时间