Sql server 如何基于日期列运行查询?

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

我有下表(示例):

我需要在到达开始日期时将研究状态从就绪更改为运行,在到达结束日期时从运行更改为完成

是否有一种方法可以仅使用SQL Server 2008 R2 Express执行此操作

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;