如何解决使用SQL判断日期,即将过期和过期
在上一个问题之后,我问了这些数据...
然后我有了一个表,该表为我提供了ConnectionID(因此提供了Patients表的链接,因此我可以推断他们的名字),评估名称和检查日期。
我添加了一个称为“更新状态”的额外列,该列旨在显示
- “上交日期”(如果检查日期至少在未来一周之后)
- “即将到期”,如果审核日期在GetDate()之后的7天内。
- 如果审核日期是GetDate()的前一天(即昨天)或更早,则为“过期”。
我一直在努力看似看似简单易懂的逻辑编程,以至于我头疼,可能会用另一双眼睛。我查询的相关部分是:
SELECT <<<<<OTHER FIELDS>>>>>>,CASE
WHEN (GetDate() < cast(ats.ReviewDate as date)
AND DATEDIFF(DAY,GetDate(),CAST(ats.ReviewDate AS DATE)) <1)
THEN ''IN Date''
WHEN GetDate() > cast(ats.ReviewDate as date) then ''OUT of Date''
WHEN DATEDIFF(day,cast(ats.ReviewDate as date),GetDate()+7 ) > 1 THEN ''DUE SOON''
WHEN ats.ReviewDate is NULL THEN ''Not Yet Reviewed'' END as [Update Status]
END
这显然是不正确的,因为将来有效的物料(即2020-09-21)为NULL,即将到期的物料(即2020-08-30)正确地说“到期”,过去的物料为正确显示“过期”。
我缺少明显的东西,但是看不到。请帮忙。
解决方法
这是您想要的吗?
case
when ats.ReviewDate is null then 'Not yet reviewed'
when ats.ReviewDate >= dateadd(week,1,cast(getdate() as date)) then 'In date'
when ats.ReviewDate >= cast(getdate() as date) then 'Due Soon'
else 'Expired'
end
逻辑如下:
-
“尚未审核”:审核日期为
null
-
“截止日期”:审核日期至少是今天后的7天00:00
-
“即将到期”:审核日期大于今天(且不超过7天)
-
“已过期”:所有其他情况
提示:case
按顺序评估分支,并在第一个匹配处停止(其余分支将被忽略);将分支置于最佳顺序通常可以简化逻辑,并避免跨分支重复条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。