代码之家  ›  专栏  ›  技术社区  ›  FatBoySlim7

闰年的SQL CONVERT GETDATE()出错

  •  1
  • FatBoySlim7  · 技术社区  · 9 年前

    我在这里尝试做的是在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

    我只是想让这个give返回一个值。。。

    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 回复  |  直到 9 年前
        1
  •  2
  •   Zohar Peled    9 年前

    将日期拆分为字符串并重新构建为日期几乎永远不是正确的解决方案。

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

    试试这个:

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

    编辑后,将数据库中的日期改为去年后的6个月的日期。

        2
  •  1
  •   miroxlav Mohit Deshpande    9 年前

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

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

    避免与文本内容之间的任何转换。