在更新

时间:2017-01-05 13:21:26

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

我们的时间捕获表有以下列,用于为每个用户收集时间戳。

Entered
Exited

使用以下查询时

select entered, exited as ORIGINALEXIT, DATEDIFF(second, entered, exited), 
DATEADD(ss, -40, exited) AS AFTERCALC, 
DATEDIFF(SECOND,entered, DATEADD(ss, -40, exited)) as AftercalcSeconds
from <table> where deptName = 'Research'

输出如下:

|Entered------------------|Exited-------------------|(NO)|AFTERCALC-----------------|AftercalcSeconds|
|2016-12-14 11:14:15.000 | 2016-12-14 11:14:16.000 | 1  | 2016-12-14 11:13:36.000   | -39            |
|2016-12-14 11:14:30.000 | 2016-12-14 11:14:32.000 | 2  | 2016-12-14 11:13:52.000   | -38            |
|2016-12-14 11:14:05.000 | 2016-12-14 11:14:43.000 | 38 | 2016-12-14 11:14:03.000   | -2             |

期望:

我们需要一个查询,可以检查“AfterCalcSeconds”是否落入-ve值,如果它落入-ve值,我们需要跳过并保留列中的原始值(否)我们需要保留结果为“AfterCalcSeconds”

提前致谢!!!

1 个答案:

答案 0 :(得分:0)

要检查“AftercalcSeconds”列是否具有负值,我使用了DateDiff函数

CASE WHEN
    DATEDIFF(SECOND, entered, exited) < 0 
THEN
    //condition
ELSE
    //else condition
END

感谢您的支持!