如何在SQL服务器中比较两个日期,忽略秒数

5

我在SQL Server中有两个日期

@dt1 = 2018-03-15 11:12:10
@dt2 = 2018-03-15 11:12:45

我希望在SQL Server中忽略秒钟并仅考虑日期、小时和分钟,以便实现这个条件:(@dt1 = @dt2)

简而言之,我想要的是这个条件应该为真。

那么,我该如何做呢?


5个回答

7

所有这些对数值四舍五入的答案都忽略了我们可以直接询问两个值之间的分钟差,如果为0,我们就知道它们发生在同一分钟内:

select CASE WHEN DATEDIFF(minute,@dt1,@dt2) = 0 THEN 'Equal' ELSE 'Not equal' END

这是因为 DATEDIFF 函数计算的是时间单位之间的过渡次数,这通常与“人类”理解相反 - 例如,DATEDIFF(minute,'10:59:59','11:00:01') 返回的值是 1 而不是 0,尽管这两个时间仅相差2秒 - 但这正是你所需要的解释,即忽略日期时间中的所有较小单位。

2
这应该适用于您。
@dt1 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)
@dt2 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)

IF @dt1 = @dt2
BEGIN

END

它将更加有效和快速。 - Gaurang Dave

2

将两个时间戳舍入到分钟进行比较:

DATEDIFF(MINUTE, @d1, @d2)

只有当值相差一分钟时,此条件才为真。

真的没有必要重新创建日期,除非有索引在使用,否则只需比较整数即可。 - shawnt00

1
@dt1withoutsecs = DATETIMEFROMPARTS(year(@dt1), month(@dt1), day(@dt1), DATEPART(hh,@dt1), DATEPART(mi,@dt1), 0, 0)
@dt2withoutsecs = DATETIMEFROMPARTS(year(@dt2), month(@dt2), day(@dt2), DATEPART(hh,@dt2), DATEPART(mi,@dt2), 0, 0)

你应该能够比较这两个

编辑:我去测试了一下(sqlfiddle今天不想工作):

test


-1

只想忽略秒,而不是小时和分钟。 - Squirrel
你是对的。我没看到那个。谢谢你澄清了这一点。 - Drizzt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接