【问题标题】:I am tring to add a year to a date if it is not before today.如果日期不在今天之前,我正在尝试在日期中添加一年。
【发布时间】:2017-07-13 17:20:23
【问题描述】:

如果日期不在今天之前,我会尝试在日期上添加一年。所以在下面的声明中我想显示 4/20/2018

declare @StartDate datetime
set @StartDate='4/20/2015'
select case when dateadd(year,1,@StartDate)> GETDATE() then 
dateadd(year,1,@StartDate) else dATEADD(year,1,(datepart(year,GETDATE()))) end

【问题讨论】:

  • 在案例的第一部分,您返回的日期为 1 年 + @start date = 4/20/2016。在其他部分,您返回一个整数。或者它出错了……你为什么要分开这一年?然后加1年呢?由于年份不是有效日期,这甚至可以编译吗?您不能在列输出上混合数据类型!
  • 我知道它出错并试图弄清楚 else 语句将如何显示 2018 年 4 月 20 日,因为 @StartDate +1 小于当前日期。

标签: sql dateadd


【解决方案1】:

我已经更改了 else 子句,因此它可以计算出开始日期和今天日期 +1 之间的差异,从而将“2015 年 4 月 20 日”变为“2018 年 4 月 20 日”

declare @StartDate date
set @StartDate='4/20/2015'
select 
case 
when dateadd(year,1,@StartDate)> GETDATE() then dateadd(year,1,@StartDate) 
else DATEADD(year,(datepart(year,GETDATE())+1-datepart(year,@StartDate)),@StartDate) 
end

此外,如果您不使用datetime 数据类型的time 部分,最好使用date,因为它只需要3 个字节的存储空间,而不是datetime 的8 个字节。 更多关于date的信息在这里:https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql 还有一个 sql 数据类型的备忘单:https://sqlserverrider.files.wordpress.com/2013/04/pic116.png

【讨论】:

  • 行得通!谢谢
  • 感谢您让我知道@user3818712 很高兴为您提供帮助!如果这可行,你可以把它作为答案吗? :)
猜你喜欢
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2019-04-10
  • 1970-01-01
相关资源
最近更新 更多