SQL CONVERT GETDATE()的闰年错误

时间:2016-03-02 14:54:18

标签: sql-server dateadd getdate

我在这里要做的是向GETDATE()添加一个时间组件,因为它被转换为varchar(25)。这是我的陈述,我该怎么做?

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

它是CONVERT(Varchar(25),year(getDate())-1)

此CONVERT实际上是以下内容的一部分:

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

进行投放

编辑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 个答案:

答案 0 :(得分:2)

将日期分解为字符串并将其重建为日期几乎不是正确的解决方案。

假设我理解了这个问题,您希望从数据库中获取日期,并将年份部分操作为当前年份之前的一年。

试试这个:

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

编辑后,将数据库中的日期记录在去年后的6个月之后。

答案 1 :(得分:1)

这将使您从tblDateApt.Date取得的DateTime值减少一年并增加6个月(根据您的意图):

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

避免与文字内容进行任何转换。