首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有四个日期时的情况

有四个日期时的情况
EN

Stack Overflow用户
提问于 2018-06-12 19:35:46
回答 3查看 65关注 0票数 1

我有四个datetime列,我想要一个额外的字符串列,当行中最近的日期比当前日期早5年时,它会显示值X。我正在尝试使用CASE WHEN来实现这一点,但我正在努力使SQL只将当前日期与最近日期进行比较。这是我的数据:

代码语言:javascript
运行
复制
ID | StartDate  | EndDate    | Modified | DoneDate 
1    2013-12-31   2015-03-20   2013-12-31  NULL    
2    2013-06-27   2013-07-24   2013-06-27  NULL            
3    1991-07-11   2001-07-11   2017-10-10  2017-10-10  

这是预期的结果:

代码语言:javascript
运行
复制
ID | StartDate  | EndDate    | Modified | DoneDate     | Marked 
1    2013-12-31   2015-03-20   2013-12-31  NULL            NULL
2    2013-06-27   2013-07-24   2013-06-27  NULL             X
3    1991-07-11   2001-07-11   2017-10-10  2017-10-10      NULL

有什么办法在什么情况下做到这一点?我目前有这个,但它不会查看最近的日期,并用X标记每一行:

代码语言:javascript
运行
复制
,CASE 
 WHEN DATEDIFF(YEAR, Modified, GETDATE()) >= 5 THEN 'X'
 WHEN DATEDIFF(YEAR, EndDate, GETDATE()) >= 5 THEN 'X'
 ELSE ' '
 END as 'Marked'

我们可以假设DoneDate >= Modified >= EndDate >= StartDate

EN

回答 3

Stack Overflow用户

发布于 2018-06-12 19:41:40

您可以使用DATE_ADD()

代码语言:javascript
运行
复制
CASE
    WHEN CURRENT_DATE > DATE_ADD(Modified, INTERVAL 1 YEAR) THEN 'X'
    WHEN CURRENT_DATE > DATE_ADD(EndDate, INTERVAL 1 YEAR) THEN 'X'
    ELSE ' '
END AS Marked

编辑:问题标签声明为MySQL,因此此解决方案适用于MySQL。我对SQL Server不太确定

票数 0
EN

Stack Overflow用户

发布于 2018-06-18 21:27:04

以下是编写此表达式的一种方法。我将DATEDIFF包装到ISNULL中,以考虑可能的NULL值。

代码语言:javascript
运行
复制
,CASE WHEN 
    ISNULL(DATEDIFF(YEAR, StartDate, GETDATE()), 999) >= 5 AND
    ISNULL(DATEDIFF(YEAR, EndDate,   GETDATE()), 999) >= 5 AND
    ISNULL(DATEDIFF(YEAR, Modified,  GETDATE()), 999) >= 5 AND
    ISNULL(DATEDIFF(YEAR, DoneDate,  GETDATE()), 999) >= 5
 THEN 'X'
 ELSE ' '
 END AS Marked
票数 0
EN

Stack Overflow用户

发布于 2018-06-18 21:44:23

在CBroe对日期的可能值进行注释之后,您只需要按以下顺序选择第一个非空值: DoneDate、ModifiedDate、StartDate、EndDate。

代码语言:javascript
运行
复制
CASE 
    WHEN DATEDIFF(
        YEAR,
        COALESCE(DoneDate, ModifiedDate, StartDate, EndDate),
        GETDATE()) >= 5 THEN 'X'
    ELSE ' ' END AS 'Marked'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50816187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档