【问题标题】:How to run queries based on a date column?如何根据日期列运行查询?
【发布时间】:2013-11-18 03:10:15
【问题描述】:

我有下表(示例):

RESEARCH  | START_DATE          | END_DATE            | STATUS         
a         | 2013-11-10 19:00:00 | 2013-11-11 12:00:00 | Ready
b         | 2013-11-12 02:30:00 | 2013-12-01 13:30:00 | Ready
c         | 2013-11-05 07:00:00 | 2013-12-10 15:50:00 | Running

当到达 START_DATE 时,我需要将研究状态从 Ready 更改为 Running,并在到达 END_DATE 时从 Running 更改为 Finished。

有没有办法只使用 SQL Server 2008 R2 Express?

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:
    UPDATE MyTable 
    SET STATUS = 'Running' 
    WHERE START_DATE >= CURRENT_TIMESTAMP
    
    UPDATE MyTable 
    SET STATUS = 'Finished' 
    WHERE END_DATE >= CURRENT_TIMESTAMP
    

    如果您按此顺序运行上面的两个查询,那么您将实现您想要做的事情。

    如果您要乱序运行它们,那么第一个 UPDATE 必须是

    UPDATE MyTable 
    SET STATUS = 'Running' 
    WHERE START_DATE >= CURRENT_TIMESTAMP 
    AND END_DATE < CURRENT_TIMESTAMP 
    

    或者您可以执行以下操作来组合两个查询:

    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 
    

    【讨论】:

    • 我需要每分钟运行一次这个查询。如何在不使用工作或任务的情况下做到这一点?
    • Francisco Reis,你不能在没有任务的情况下每分钟都运行查询。您必须创建 SQL Server 作业并安排它每分钟运行一次。
    • @Francisco Reis,我刚刚注意到您正在运行 SQL Server 的 Express 版本。因此,您不能使用 SQL Server 代理。不过,Answer 确实为您提供了一些替代选择。
    【解决方案2】:

    我认为这样的事情对你有用:

    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;
    

    当然,在开始更新之前,您必须确保状态正常。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多