Sql 如何根据当前时间和列时间的差异更新表

Sql 如何根据当前时间和列时间的差异更新表,sql,sql-server,Sql,Sql Server,我有一个名为node\u status的表,它有三列: id(int) 状态(位) modifiedtime(smalldatetime) 我想对它运行一个查询,如果表中的任何一行包含一个modifiedtime值,该值比当前时间早5分钟,则status列设置为0(false) 有人能告诉我怎么做吗?(使用SQL Server) 谢谢您可以使用函数计算五分钟前的日期/时间,然后将modifiedtime列与此值进行比较: UPDATE node_status SET status = 0 WHE

我有一个名为
node\u status
的表,它有三列:

  • id(int)
  • 状态(位)
  • modifiedtime(smalldatetime)
  • 我想对它运行一个查询,如果表中的任何一行包含一个
    modifiedtime
    值,该值比当前时间早5分钟,则
    status
    列设置为0(false)

    有人能告诉我怎么做吗?(使用SQL Server)

    谢谢

    您可以使用函数计算五分钟前的日期/时间,然后将modifiedtime列与此值进行比较:

    UPDATE node_status SET status = 0 WHERE modifiedtime <= dateadd(minute, -5, CURRENT_TIMESTAMP)
    
    UPDATE node\u status SET status=0,其中modifiedtime您可以使用函数计算五分钟前的日期/时间,然后将modifiedtime列与此值进行比较:

    UPDATE node_status SET status = 0 WHERE modifiedtime <= dateadd(minute, -5, CURRENT_TIMESTAMP)
    

    UPDATE node\u status SET status=0,其中modifiedtime如果要基于当前时间执行查询,可以使用getdate(),并使用dateadd函数添加或删除日期中的时间量。因此:

    update 
         node_status 
    set 
         status = 0 
    where 
         modifiedtime < dateadd(minute, -5, getdate())
    
    更新
    节点状态
    设置
    状态=0
    哪里
    modifiedtime
    如果要基于当前时间进行查询,可以使用getdate(),并使用dateadd函数添加或删除日期中的时间量。因此:

    update 
         node_status 
    set 
         status = 0 
    where 
         modifiedtime < dateadd(minute, -5, getdate())
    
    更新
    节点状态
    设置
    状态=0
    哪里
    modifiedtime
    查询

    UPDATE node_status
    SET [Status] = 0
    WHERE DATEDIFF(n, ModifiedTime, CURRENT_TIMETAMP) >= 5
    
    但是,如果节点_状态表很大,那么由于表/索引扫描,性能会很差。如果您在ModifiedTime上有索引:

    DECLARE @ThresholdTime DATETIME
    SET @ThresholdTime = DATEADD(n, -5, CURRENT_TIMESTAMP)
    
    UPDATE node_status
    SET [Status] = 0
    WHERE ModifiedTime <= @ThresholdTime
    
    DECLARE@ThresholdTime-DATETIME
    设置@ThresholdTime=DATEADD(n,-5,当前时间戳)
    更新节点\u状态
    设置[状态]=0
    其中ModifiedTime查询

    UPDATE node_status
    SET [Status] = 0
    WHERE DATEDIFF(n, ModifiedTime, CURRENT_TIMETAMP) >= 5
    
    但是,如果节点_状态表很大,那么由于表/索引扫描,性能会很差。如果您在ModifiedTime上有索引:

    DECLARE @ThresholdTime DATETIME
    SET @ThresholdTime = DATEADD(n, -5, CURRENT_TIMESTAMP)
    
    UPDATE node_status
    SET [Status] = 0
    WHERE ModifiedTime <= @ThresholdTime
    
    DECLARE@ThresholdTime-DATETIME
    设置@ThresholdTime=DATEADD(n,-5,当前时间戳)
    更新节点\u状态
    设置[状态]=0
    修改时间在哪里