【问题标题】:SQL Server query for changing status according to dateSQL Server 查询根据日期更改状态
【发布时间】:2013-07-10 18:47:35
【问题描述】:

我有一张表,其中包含 StartDateEndDate(日期时间)

我正在 SQL Server 2008R2 中寻找一个很好的查询,它将检查 StartDate 和 EndDate 是否相等,如果相等,则将另一个值更改为“0”

简而言之,我的程序有“学习环境”,每个都有一个状态码(打开/关闭/存档)。晚上我正在运行一些预定的程序,如果我将开始日期和结束日期设置为同一日期,状态应该会更改为关闭。

所以查询应该:

  1. 寻找相同日期的学习环境;
  2. 检查日期是否为今天(进程每晚运行)=> 今天 = StartDate = EndDate;
  3. 将其他列(状态)值从 1 更改为 0。

【问题讨论】:

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


    【解决方案1】:

    我喜欢使用 DateAdd 和 DateDiff,因为它总是比其他技术更有效。

    工作 sqlfiddle: http://sqlfiddle.com/#!6/f1a76/1

    UPDATE Table1
    SET Status = 0
    WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, [StartDate])) = DATEADD(dd, 0, DATEDIFF(dd, 0, [EndDate]))
      AND DATEADD(dd, 0, DATEDIFF(dd, 0, [StartDate])) = DATEADD(dd, 0, DATEDIFF(dd, 0, GetDate()))
    

    【讨论】:

      【解决方案2】:

      听起来像一个简单的UPDATE 声明:

      UPDATE table
      SET status = 0
      WHERE CAST(StartDate AS DATE) = CAST(EndDate AS DATE)
           AND CAST(StartDate AS DATE) = CAST(GETDATE() AS DATE)
      

      【讨论】:

      • 嗨,它不起作用 - 说:Msg 243,Level 16,State 1,Line 1 Type DATE 不是定义的系统类型。
      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2014-08-29
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多