DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
有人可以解释我这个.
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)
希望这有助于某人.:)