(轻微邀请航空意见)
这是退回两个月前的第一个月的最有效/可接受的方式:
SELECT DATEADD(mm,-2,GETDATE() - DAY(GETDATE())) + 1
答案 0 :(得分:3)
不确定这是否更快,但是......
SELECT DATEADD(m, DATEDIFF(m, 0, GETDATE()) -2, 0)
从'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天也能使事情正确