【问题标题】:Error with SQL CONVERT GETDATE() for leap years闰年的 SQL CONVERT GETDATE() 错误
【发布时间】:2016-03-03 00:02:22
【问题描述】:

我在这里要做的是向 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))

【问题讨论】:

  • 对我来说似乎是XYPropblem。你的目标是什么?
  • 当我在闰年执行 CONVERT(varchar25),year(GetDate())-1) 时,我收到一个错误,因为它试图回到 2/29/2015 - 但我知道我是否可以向其中添加时间组件,它会简单地回到 2/28/2016。当我执行 SELECT dateadd(yy,-1,'2/29/2016') 时,它给了我 2/28/2016 但它在此查询中不起作用
  • tblDAteApt 中的数据是什么样的?您能否展示一些您遇到问题的记录的示例输入以及 DAteAdd 的预期输出?
  • @HLGEM 所有日期都是日期时间。当我在闰日运行此 DATEADD 时,在本例中为 '2/29/2016' 我收到一个错误:将 varchar 数据类型转换为日期时间数据类型导致值超出范围。
  • 再一次,你的目标是什么?看来您正在寻求错误的解决方案,所以请描述问题。

标签: sql-server dateadd getdate


【解决方案1】:

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

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

试试这个:

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

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

【讨论】:

  • 谢谢你uuuuuuuuuuuuuuuu!
  • 如果你有第二个,你能解释一下你有第二个 DATEADD 吗?
  • 只是加上6个月。它可以通过单个 dateadd 来完成,但是您必须计算数据库中去年和年份之间的月数。这样它的可读性更高。
【解决方案2】:

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

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

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

【讨论】:

  • 我需要将 DateApt 分解为 DateApt 日和月,但我使用 GETDATE 来获取年份 - 请在“as DateTime”之前查看 DateAdd 的结尾跨度>
  • @FatBoySlim7 - 然后你可以使用DATEADD(y, tblDateApt.date, YEAR(GETDATE()) - YEAR(tblDateApt.date)) 来调整年份。
猜你喜欢
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多