【发布时间】:2018-03-15 06:09:52
【问题描述】:
我在 SQL Server 中有两个日期
@dt1 = 2018-03-15 11:12:10
@dt2 = 2018-03-15 11:12:45
我要(@dt1 = @dt2)
这个条件应该为真。
简而言之,我想忽略秒,只考虑日期和小时和分钟。
如何在 SQL Server 中做到这一点?
【问题讨论】:
标签: sql-server tsql datetime
我在 SQL Server 中有两个日期
@dt1 = 2018-03-15 11:12:10
@dt2 = 2018-03-15 11:12:45
我要(@dt1 = @dt2)
这个条件应该为真。
简而言之,我想忽略秒,只考虑日期和小时和分钟。
如何在 SQL Server 中做到这一点?
【问题讨论】:
标签: sql-server tsql datetime
所有这些四舍五入的答案都忽略了我们可以要求两个值之间的分钟差,如果它是 0,我们知道它们发生在同一分钟内:
select CASE WHEN DATEDIFF(minute,@dt1,@dt2) = 0 THEN 'Equal' ELSE 'Not equal' END
这是有效的,因为 DATEDIFF 计算 transitions,这通常与“人类”解释相反 - 例如DATEDIFF(minute,'10:59:59','11:00:01') 将返回 1 而不是 0,尽管时间仅相隔 2 秒 - 但这正是您正在寻找的解释,其中日期时间内的所有较小单位都将被忽略。
【讨论】:
比较日期时间都向下舍入到分钟:
DATEDIFF(MINUTE, @d1, @d2)
当且仅当值按分钟不同时才会如此。
【讨论】:
这应该适合你。
@dt1 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)
@dt2 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)
IF @dt1 = @dt2
BEGIN
END
【讨论】:
这是您的解决方案: How can I truncate a datetime in SQL Server?
简而言之,这取决于您的版本。在 SQL Server 2008 中有 cast(getDate as date)
【讨论】: