【问题标题】:In T-SQL, how do i look at the date in a column and select just the mm/dd and give it this years date or next years date?在 T-SQL 中,我如何查看列中的日期并仅选择 mm/dd 并给出今年或明年的日期?
【发布时间】:2026-01-20 11:10:02
【问题描述】:

使用 SQL 2005db 的 SQL 2008R2。

这是我的桌子

Date1             Date2             
02/01/2007        NULL             
08/15/2009        NULL              
12/15/2014        NULL             

这就是我所期待的。 DATE2 用于根据他们注册的月/日设置年度评估日期。基本上,如果注册日期是过去,那么年份应该是2014年。如果注册日期是今年,那么评估日期应该是明年,以此类推未来几年。

SignUpDate        AppraisalDate           
02/01/2007        02/01/2014        
08/15/2009        08/15/2014
02/20/2014        02/20/**2015**
12/15/2014        12/15/**2015**  

这是我正在使用的语句的示例。但是,我无法获得 AppraisalDate 列中的最后一个日期以滚动到下一年。我正在从临时表中获取 SignUpDate。为了清楚起见,我省略了连接内容。

select 
SignUpDate = TempTable.Date1, 
AppraisalDate = dateadd(YEAR, year(getdate())-year(TempTable.Date1), TempTable.Date1)  

就是这样。几周前我发布了这个问题的第一部分,并把这部分记下来(它帮助很大)。但是,我只是无法获得翻转的日期。

感谢您的帮助!

【问题讨论】:

    标签: sql sql-server-2005 sql-server-2008-r2


    【解决方案1】:

    您可以使用CASE 语句来执行此操作:

    SELECT
    SignUpDate = TempTable.Date1,
    AppraisalDate = 
      CASE WHEN (year(Date1) = year(getdate()))
      THEN 
        dateadd(YEAR, 1, TempTable.Date1)
      ELSE
        dateadd(YEAR, year(getdate())-year(TempTable.Date1), TempTable.Date1)
      END
    FROM TempTable
    

    Sample SQL Fiddle

    结果

    |                      SIGNUPDATE |                   APPRAISALDATE |
    |---------------------------------|---------------------------------|
    | February, 01 2007 01:00:00+0000 | February, 01 2014 01:00:00+0000 |
    |   August, 15 2009 02:00:00+0000 |   August, 15 2014 02:00:00+0000 |
    | December, 15 2014 01:00:00+0000 | December, 15 2015 01:00:00+0000 |
    

    【讨论】:

    • jpw,完美运行。非常感谢。我整天都在与案例作斗争,但我无法获得 WHEN 子句。非常非常感谢您的快速回复!
    【解决方案2】:

    试试这个

    select SignUpDate, 
    case when Year(SignUpDate) < Year(getdate()) Then  DATEADD (year,Year(getdate()) - Year(SignUpDate),SignUpDate)
    when Year(SignUpDate) =  Year(getdate()) then DATEADD (year,1,SignUpDate) end as AppraisalDate
    from Appraisal;
    

    【讨论】:

      最近更新 更多