2016-03-02 60 views
1

我在这里要做的是将时间组件添加到GETDATE(),因为它正在转换为varchar(25)。这是我的说法,我该怎么做?闰年SQL CONVERT GETDATE()的错误

CONVERT(Varchar(25),YEAR(GETDATE())-1) 

难道是沿着CONVERT东西(VARCHAR(25),年(GETDATE())-1)

将此转换实际上是一部分:

DATEADD(m, 6,CAST(CONVERT(Varchar(25),MONTH(tblDateApt. Date)) + 
'/' + CONVERT(Varchar(25),DAY(tblDateApt. Date)) 
+ '/' + CONVERT(Varchar(25),YEAR(GETDATE())-1) As DateTime)) 

的问题是当我在闰年日期运行此声明时,出现错误。我想补充一个时间GETDATE以前被铸成DATETIME

EDIT 2

我只是试图让这给返回值...

select DATEADD(m, 6,CAST(CONVERT(Varchar(25),MONTH('2/29/2016')) + '/' + CONVERT(Varchar(25),DAY('2/29/2016')) + '/' + CONVERT(Varchar(25),YEAR(GETDATE())-1) As DateTime)) 
+2

对我来说就像是[XYPropblem](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你的目标是什么? –

+0

当我在闰年执行CONVERT(varchar25),year(GetDate()) - 1)时,出现错误是因为它试图回到2015年2月29日 - 但我知道是否可能添加了一个时间组件,它只会回到2/28/2016。当我做一个SELECT dateadd(yy,-1,'2/29/2016')它给了我2/28/2016,但它不在这个查询中工作 – FatBoySlim7

+0

tblDAteApt中的数据是什么?你可以显示一些你遇到麻烦的记录样本输入和DAteAdd的预期输出吗? – HLGEM

回答

2

将日期转换为字符串并重建为日期几乎从来都不是正确的解决方案。

假设我明白这个问题,你想从你的数据库中获取日期,并将年份部分操作为当年之前的一年。

试试这个:

SELECT tblDateApt.[Date], 
     DATEADD(Month, 
       6, 
       DATEADD(YEAR, 
         YEAR(GETDATE()) - 1 - YEAR(tblDateApt.[Date]), 
         tblDateApt.[Date]) 
     ) 
FROM tblDateApt 

编辑以它操纵去年后获得6个月的时间在数据库中的日期之后。

+0

谢谢youuuuuuuuuuuuuuuuuuu! – FatBoySlim7

+0

如果你有第二个,你能解释一下你的第二个DATEADD吗? – FatBoySlim7

+1

这只是添加6个月。它可以通过一个日期加载完成,但是必须计算数据库中上一年和下一年之间的月数。这样它更具可读性。 –

1

这将离开你从tblDateApt.Date一个逐年下降,并增加6个月拍摄日期时间值(按你的意图):

SELECT DATEADD(month, 
       6, 
       DATEADD(year, 
         YEAR(GETDATE()) - YEAR(tblDateApt.date) - 1, 
         tblDateApt.date 
        ) 
      ) 

避免任何转换,并从文本内容。

+0

我需要,因为我打破了DateApt - 进入DateApt日和月份,但我使用GETDATE获得年份 - 查看DateAdd'DateTime'之前的末尾 – FatBoySlim7

+2

@ FatBoySlim7 - 然后您可以使用' DATEADD(y,tblDateApt.date,YEAR(GETDATE()) - YEAR(tblDateApt.date))'调整年份。 – miroxlav

+0

谢谢,你的回答也是正确的! – FatBoySlim7