Sql server 如何基于日期列运行查询?
我有下表(示例): 我需要在到达开始日期时将研究状态从就绪更改为运行,在到达结束日期时从运行更改为完成 是否有一种方法可以仅使用SQL Server 2008 R2 Express执行此操作Sql server 如何基于日期列运行查询?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有下表(示例): 我需要在到达开始日期时将研究状态从就绪更改为运行,在到达结束日期时从运行更改为完成 是否有一种方法可以仅使用SQL Server 2008 R2 Express执行此操作 UPDATE MyTable SET STATUS = 'Running' WHERE START_DATE >= CURRENT_TIMESTAMP UPDATE MyTable SET STATUS = 'Finished' WHERE END_DATE >= CURRENT_TI
UPDATE MyTable
SET STATUS = 'Running'
WHERE START_DATE >= CURRENT_TIMESTAMP
UPDATE MyTable
SET STATUS = 'Finished'
WHERE END_DATE >= CURRENT_TIMESTAMP
如果您按照这个顺序运行上面的两个查询,那么您将实现您想要做的事情
如果您要按顺序运行它们,那么第一次更新必须是
UPDATE MyTable
SET STATUS = 'Running'
WHERE START_DATE >= CURRENT_TIMESTAMP
AND END_DATE < CURRENT_TIMESTAMP
更新MyTable
设置状态='正在运行'
其中开始日期>=当前时间戳
和结束日期<当前时间戳
或者,您可以执行以下操作来组合这两个查询:
UPDATE MyTable
SET STATUS =
CASE
WHEN START_DATE >= CURRENT_TIMESTAMP
AND END_DATE < CURRENT_TIMESTAMP THEN 'Running'
WHEN END_DATE >= CURRENT_TIMESTAMP THEN 'Finished'
ELSE 'Ready'
END
更新MyTable
设置状态=
案例
开始日期>=当前时间戳时
结束日期<当前时间戳,然后“运行”
当结束日期>=当前时间戳时,则为“完成”
否则“准备好了”
结束
我想这样的东西对你会有用的:
update Table
set
Status = case
when
CURRENT_TIMESTAMP between START_DATE and END_DATE
and STATUS = 'Ready' then 'Running'
when
CURRENT_TIMESTAMP > END_DATE
and STATUS = 'Running' then 'Finished'
else
Status
end;
当然,在开始更新之前,您必须确保状态正常。我需要每分钟运行一次此查询。如何在不使用作业或任务的情况下执行此操作?如果没有任务,您不能每分钟都运行查询。您必须创建SQL Server作业并将其计划为每分钟运行。@Francisco Reis,我刚刚注意到您正在运行SQL Server的Express版本。因此,您不能使用SQLServer代理。不过,这确实为您提供了一些备选方案。
update Table
set
Status = case
when
CURRENT_TIMESTAMP between START_DATE and END_DATE
and STATUS = 'Ready' then 'Running'
when
CURRENT_TIMESTAMP > END_DATE
and STATUS = 'Running' then 'Finished'
else
Status
end;