返回完整两个月的第一个月

时间:2013-01-30 15:22:00

标签: sql sql-server-2008

(轻微邀请航空意见)

这是退回两个月前的第一个月的最有效/可接受的方式:

SELECT DATEADD(mm,-2,GETDATE() - DAY(GETDATE())) + 1

2 个答案:

答案 0 :(得分:3)

不确定这是否更快,但是......

SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()) -2, 0) 

SQL-Fiddle

从'1900-01-01'计算月份的差异:

DATEDIFF(m, 0, GETDATE())  -- 1356

将差异添加到'1900-01-01'减去两个月

答案 1 :(得分:1)

只有两个操作:

SELECT DATEADD(month,DATEDIFF(month,'20010301',GETDATE()),'20010101')

利用两个固定日期之间的关系,包括删除两个月,同时“标准化”日期以删除日期和时间信息。


这很好的是你可以使用它来实现其他难以正确的技巧,而不会跳过更多的箍。例如两个月前的 last 日:

SELECT DATEADD(month,DATEDIFF(month,'20010301',GETDATE()),'20010131')

即使该月少于31天也能使事情正确