SQL日期CONVERT

问题描述:

我有以下一段代码,它会在我指定的日期前1个月给出日期。例如,如果我想获得1个月的日期之前11年11月30日下面的代码会给2011/10/31SQL日期CONVERT

select CONVERT(DATETIME, DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'11-30-11'),0)), 102) 

的如何修改上面的代码的结果,这样它会在我指定的日期前两个月返回日期,因此如果我在代码中指定'11 -30-11',它将返回2011/09/30?

我真的不明白上面的代码是如何工作的?我尝试将-1改为-2,但只减1天和1个月,因此它将返回2011/10/30而不是10/31。我需要它返回2011/09/30,比代码(11-30-11)中的日期少2个月。

+0

前1个月11月30日是10月30日。你想要“前n个月结束”? – gbn

+0

正是我想让它返回上个月的最后一天。所以上面的代码工作正常。它返回2011年10月31日,但我现在需要它返回提前2个月的最后一天,然后返回代码中指定的日期。它应该返回9/30/2011 –

+0

完美的工作。谢谢! –

CONVERT(DATETIME, 
     DATEADD(d,-1, 
      DATEADD(mm, DATEDIFF(m, 32,'20111130'), 0) -- use yyyymmdd and 32 
     ) 
    , 102) 

与0 DATEADD/DATEDIFF比较01一月1900所以改为32,使其1900年2月1日

另外,你的日期格式是不安全的。使用YYYYMMDD为SQL Server

,也许简单的这样

DATEADD(d, -1, DATEADD(mm, -2, DATEADD(d, 1,'20111130')))