0

我有一张包含StartDateEndDate (Datetime)的表

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

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

所以查询应该:

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

2 回答 2

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)
于 2013-07-10T18:50:46.453 回答
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()))
于 2013-07-10T19:04:06.770 回答