dateadd(D, 1, getdate()), dateadd(Y, 1, getdate())
这两者有什么区别?谁能解释为什么他们给出相同的结果?
我试图让培训完成日期应该大于或等于一年。此外,我需要根据培训完成日期找出未来 30 天内谁会来加入。
dateadd(D, 1, getdate()), dateadd(Y, 1, getdate())
这两者有什么区别?谁能解释为什么他们给出相同的结果?
我试图让培训完成日期应该大于或等于一年。此外,我需要根据培训完成日期找出未来 30 天内谁会来加入。
这个SQL Fiddle演示了两者之间的区别。
例如,使用当前日期 ( GETDATE()
) 作为数据库中的日期,我们有一个可能看起来像...的表
id date
1 March, 25 2013 18:20:29+0000
...
第一个参数是datepart
. 这可以是year (yy,yyyy)
, quarter (qq,q)
,dayofyear (dy,y)
等...整个列表可以在msdn中找到。
我们使用 D 表示日期...这将在日期上增加 1 天。
SELECT dateadd(D,1,getdate()) FROM test;
将返回March, 26 2013 18:24:27+0000
。
虽然你可能认为 Y 会被使用一年,但你错了。Y 用于一年中的某一天。我们必须使用YY
或YYYY
一年才能添加。
SELECT dateadd(Y,1,getdate()) FROM test;
将导致March, 26 2013 18:24:27+0000
,这与我们之前的查询相同。这是因为一年中的日子与日子相同。
SELECT dateadd(YY,1,getdate()) FROM test;
将输出预期的getdate()
+ 1 year
... ( March, 25 2014 18:31:27+0000
)
对于第二个“y”获取一年中的日期,并不是说添加一年。所以他们俩都在说同样的话。第一个说在当天添加一天,第二个说在今年的当天添加一天。要添加一年,您需要说 dateadd(YY, 1, getdate())。
http://msdn.microsoft.com/en-us/library/ms186819.aspx
我不遵循您关于您要做什么的最后陈述。但是,如果您使用上面链接中定义的日期部分,您应该能够添加您需要的天数/月数/年数。