0

(轻微邀请发表意见)

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

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

2 回答 2

3

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

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

SQL小提琴

计算与 '1900-01-01' 的月份差:

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

将差额添加到“1900-01-01”减去两个月

于 2013-01-30T15:27:45.413 回答
1

只有两个操作:

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

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


这很好的地方在于,您可以使用它来实现其他难以正确完成的技巧,而无需跳过更多的障碍。比如两个月前一个月的最后一天:

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

即使那个月的天数少于 31 天,它也能把事情做好

于 2013-01-30T15:41:43.883 回答