输入的一种更好的方式:构建查询
Month, Year, GraceMonth.
全部都是整数。
我们需要做什么?
首先需要构建从月,年和一天的日期(需要从当前日期来获得) ,然后添加到GraceMonth将it.We加入GraceMonth后得到新的日期明显。 接下来,从构建的日期开始,我们需要将其与当前日期进行比较。
你有什么试过?
例如(我在零件显示)
DECLARE @Month INT = 11
DECLARE @YEAR INT = 2012
DECLARE @Graceperiod INT = 2
SELECT
[Construct Initial Date] = DATEADD(mm, (@YEAR - 1900) * 12 + @Month - 1 , DAY(GETDATE()) - 1) --construct initial date
,[Add Grace period] =DATEADD(mm,@Graceperiod,DATEADD(mm, (@YEAR - 1900) * 12 + @Month - 1 , DAY(GETDATE()) - 1)) --add grace month
,[DateDiff] = DATEDIFF
(
DAY,
DATEADD(mm, (@YEAR - 1900) * 12 + (@Month + @Graceperiod) - 1 , DAY(GETDATE()) - 1),
GETDATE()
) -- datediff
结果
Construct Initial Date Add Grace period DateDiff
2012-11-14 00:00:00.000 2013-01-14 00:00:00.000 -122
如果你的答案是正确的,那么你在找什么?
除此之外还有其他的好办法吗?没有铸造越简洁越好。如果涉及一些棘手的部分(例如一些棘手的数学计算),请提供解释。
在此先感谢。
第一个观察结果是:为什么不把'@ Month'和'@ Graceperiod'加在一起,而不是与他们一起做两个单独的'DATEADD(月...)调用? –
先生,我在[Datediff]专栏中更新了以下建议 –