2009-08-24 80 views
2

这不应该这么难。我只是需要以下条件:SQL Server下一年的第一天?

SET @DueDate = CONVERT (DATETIME, '01/01/2010') 

不过,我需要它务实,这样,如果是2010年三月,由于将日期'01/01/2011' 。

我知道这很简单,但我的大脑并没有想出它。我确定它是用DateAdd和getdate()

回答

7

现在和零年之间的分界线数量减去一个(1899年12月31日),再加上。

SELECT DATEADD(year, DATEDIFF(year, -1, GETDATE()), 0) 

让我们尝试的日期在明年获得2011年因为1 2010年1月是在2009年,明年开始......

SELECT DATEADD(year, DATEDIFF(year, -1, '2010-03-21'), 0) 
+0

其实,返回'1/2/2010'。 :) – DavidStein 2009-08-24 19:09:29

+0

第二个工作。谢谢。 – DavidStein 2009-08-24 19:11:03

0

也许,创建一个表与今年第一日期,然后选择比您的日期更大的最小尺寸。或许简单地把一个字符串放在一起,'01/01'+(MyYear + 1)?

2

基于数据库期刊文章:How to Calculate Different SQL Server Dates

首先下一页

我用一年的时间间隔(YY)的日显示下一个年的第一天。

选择DATEADD(YY,DATEDIFF(YY,-1,GETDATE()),0)

+0

谢谢,但不应该是: 选择DATEADD(yy,DATEDIFF(yy,-1,getdate()),0) 与上面相同的下一年? – DavidStein 2009-08-24 19:25:33

+0

是的。正如发布的那样,这是今年*的第一天。我会做出改变。 – 2009-08-24 19:54:51

0

你可以添加一个到当前的年份,然后用的concat 1月1,然后再转换回日期:

select CONVERT(datetime, CONVERT(VARCHAR(20), YEAR(GETDATE())+1) + '.01.01') 
0

使用你上面的例子一些地方也能做到这一点。现在这假设您的可接受的日期格式匹配M-d-yyyy。

DATEADD(year, 1,'1-1-'+convert(varchar,DATEPART(YYYY,GetDate()))) 

注意:您知道现在的日期,拿到年终部分,创建转换为日期的字符串,然后添加一个到一年。

相关问题