0
    dateadd(D, 1, getdate()), dateadd(Y, 1, getdate())

这两者有什么区别?谁能解释为什么他们给出相同的结果?

我试图让培训完成日期应该大于或等于一年。此外,我需要根据培训完成日期找出未来 30 天内谁会来加入。

4

2 回答 2

1

这个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 用于一年中的某一天。我们必须使用YYYYYY一年才能添加。

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)

于 2013-03-25T18:33:25.783 回答
1

对于第二个“y”获取一年中的日期,并不是说添加一年。所以他们俩都在说同样的话。第一个说在当天添加一天,第二个说在今年的当天添加一天。要添加一年,您需要说 dateadd(YY, 1, getdate())。

http://msdn.microsoft.com/en-us/library/ms186819.aspx

我不遵循您关于您要做什么的最后陈述。但是,如果您使用上面链接中定义的日期部分,您应该能够添加您需要的天数/月数/年数。

于 2013-03-25T18:12:58.110 回答