淘汰冗长的持续时间

时间:2014-05-15 15:42:28

标签: sql-server datediff

我只希望持续时间少于10分钟。我目前的代码如下:

Duration = DateDiff(ss, TimeBegin, TimeEnd)

TimeBegin和TimeEnd是TIME格式。显然,持续时间现在回来了:

00:00:07

这就是我遇到麻烦的地方。我可以使用如下所示的语句:

<= 00:10:00 or <= '00:10:00'

基本上我想要:

Duration = (Datediff(ss, TimeBegin, TimeEnd) *ONLY IF LESS THAN 10 MINUTESg)

我之前在查询中已经说过,如果没有返回结果来创建NULL,那么当持续时间大于10分钟时,我只是想要忽略它,就像它不存在一样。

2 个答案:

答案 0 :(得分:2)

DateDiff(ss, TimeBegin, TimeEnd)为您提供秒数差异。只需使用Case语句即可返回值,如果该值低于600(隐含...ELSE Null):

set @Duration = CASE
 WHEN DateDiff(ss, @TimeBegin, @TimeEnd) < 600
 THEN DateDiff(ss, @TimeBegin, @TimeEnd)
END;

答案 1 :(得分:1)

同意@aucuparia。但是(这是主题启动器)小心使用datediffs是秒而不是分钟。他们的行为是不一样的,比如几个月/年的日期。我的意思是服务器对你的操作数进行舍入:

select datediff(mi,'2014-05-15 19:00:00','2014-05-15 19:10:59')

不一样
select datediff(ss,'2014-05-15 19:00:00','2014-05-15 19:10:59')

只要执行它们并看到差异。第一个仍然是10分钟的差异,但第二个将被600秒'where'条款切断。