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个月。
答
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')))
前1个月11月30日是10月30日。你想要“前n个月结束”? – gbn
正是我想让它返回上个月的最后一天。所以上面的代码工作正常。它返回2011年10月31日,但我现在需要它返回提前2个月的最后一天,然后返回代码中指定的日期。它应该返回9/30/2011 –
完美的工作。谢谢! –