我有一个表,其中有几列用作datetime
邮票。该表包含以下列
UpDate datetime
SearchDate datetime
ExpDate dateadd(hour,24,UpDate)
Active nvarchar(5)
当UpDate
列通过每日导入更新时,计算列ExpDate
将以时间+ 24小时更新。我希望Active
列在当前日期时间小于ExpDate
时表示'Y'
,当当前日期时间等于或大于ExpDate
时表示'N'
。
我想只是使用存储过程无限期地运行来检查这一点并根据需要更新,但这没有意义,想知道是否有人对如何做到这一点有任何其他建议。例如,如果我可以使用它作为计算列以及基于if语句查询。
除非您有很好的理由坚持ExpDate
和Active
的计算,否则我认为您应该在对表的查询中进行计算。
像这样:
select [UpDate],
SearchDate,
dateadd(hour, 24, SearchDate) as ExpDate,
case when getdate() >= dateadd(hour, 24, SearchDate)
then 'N'
else 'Y'
end as Active
from YourTable
如果您想要计算列,您的DDL看起来像这样:
create table YourTable
(
[UpDate] datetime,
SearchDate datetime,
ExpDate as dateadd(hour, 24, SearchDate),
Active as case when getdate() >= dateadd(hour, 24, SearchDate)
then 'N'
else 'Y'
end
)