SQL Server查询根据日期更改状态

时间:2013-07-10 18:47:36

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

我有一个包含 StartDate EndDate (日期时间)

的表格

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

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

所以查询应该:

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

工作方式: 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()))