【问题标题】:How to compare two dates ignoring seconds in sql server如何比较两个日期忽略sql server中的秒数
【发布时间】: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


【解决方案1】:

所有这些四舍五入的答案都忽略了我们可以要求两个值之间的分钟差,如果它是 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 秒 - 但这正是您正在寻找的解释,其中日期时间内的所有较小单位都将被忽略。

【讨论】:

    【解决方案2】:

    比较日期时间都向下舍入到分钟:

    DATEDIFF(MINUTE, @d1, @d2)
    

    当且仅当值按分钟不同时才会如此。

    【讨论】:

    • 真的不需要重新创建日期,只需比较整数,除非有索引。
    【解决方案3】:

    这应该适合你。

    @dt1 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)
    @dt2 = SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0)
    
    IF @dt1 = @dt2
    BEGIN
    
    END
    

    【讨论】:

    • 会更有效更快捷。
    【解决方案4】:
    @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今天不想工作):

    【讨论】:

      【解决方案5】:

      这是您的解决方案: How can I truncate a datetime in SQL Server?

      简而言之,这取决于您的版本。在 SQL Server 2008 中有 cast(getDate as date)

      【讨论】:

      • OP 只想忽略秒,而不是小时和分钟
      • 你是对的。没看到。谢谢你说清楚。
      猜你喜欢
      • 2018-07-28
      • 2011-10-25
      • 1970-01-01
      • 2015-08-28
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多