Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 从SQL中包含日期的4列中评估与今天最近的未来日期_Date_Sql Server 2008 - Fatal编程技术网

Date 从SQL中包含日期的4列中评估与今天最近的未来日期

Date 从SQL中包含日期的4列中评估与今天最近的未来日期,date,sql-server-2008,Date,Sql Server 2008,我有一个表,其中有4列日期。我需要在第5列中计算距离今天最近的未来日期,并在同一行中显示该日期,例如,20周年比85岁生日近还是10周年比85岁生日近。注:85岁生日永远是最重要的日子。第6列需要显示相应的列标题 非常感谢任何人能提供的帮助 Column names / sample values strt date - 01/01/2010 85th birthday - 11/12/2047 10th anniv - 01/01/2020 20th anniv

我有一个表,其中有4列日期。我需要在第5列中计算距离今天最近的未来日期,并在同一行中显示该日期,例如,20周年比85岁生日近还是10周年比85岁生日近。注:85岁生日永远是最重要的日子。第6列需要显示相应的列标题

非常感谢任何人能提供的帮助

Column names / sample values

strt date     - 01/01/2010  
85th birthday - 11/12/2047   
10th anniv    - 01/01/2020  
20th anniv    - 01/01/2030  
next date     - 01/01/2030  
anniv_type    - 20th anniv 

下面的查询使用
交叉应用
UNPIVOT
四个日期列,然后获取最接近当前日期的一个<代码>前1仅获取一行,即最近的日期

select  *
from    yourtable t
        cross apply
        (
            select  top 1 *
            from    
            (
                values  ([strt date], 'strt date'),
                        ([85th birthday], '85th birthday'),
                        ([10th anniv], '10th anniv'),
                        ([20th anniv], '20th anniv')
            ) d ([next date], [anniv_type])
            where   [next date] > getdate()
            order by datediff(day, getdate(), [next date])
        ) n

你的描述令人费解。您提到日期的
4列
需要在第5列计算日期
第6列
。你能指出所有这些栏目的名称吗?请参考您在此处首次发布的示例数据。列名在上面示例的左侧,示例输出在右侧,这是为了正确发布此信息。我需要计算[next date]和[anniv_type]字段。希望澄清?对于
下一个日期
,您可以使用
日期添加(年份,20,strtdate)
对不起,松鼠,我解释得不好。我已经用你建议的代码计算了{85岁生日],[10岁],[20岁]。我需要做的是根据getdate()计算这3个日期,并用将来最接近getdate()的日期填充[next date]。