【问题标题】:SQL Server DateDiff Vs .Net DateDiffSQL Server DateDiff 与 .Net DateDiff
【发布时间】:2012-12-26 05:58:28
【问题描述】:

SQL 服务器:

DECLARE @Date1 DATETIME
SET @Date1 = '2012-26-12 12:00:05 AM'

DECLARE @Date2 DATETIME
SET @Date2 = '2012-28-12 12:00:00 AM'

SELECT @Date1, @Date2, DATEDIFF(DAY,@Date1,@Date2) 

return 2

VB.Net

DateDiff(DateInterval.Day,Convert.ToDateTime("26-12-2012 12:00:05 AM"), 
Convert.ToDateTime("28-12-2012 12:00:00 AM"))

return 1

为什么结果不同?我的两分钱是 SQL Server 的 DateDiff 仅减去日期时间值 (28 - 26) 的日期部分,而 .Net DateDiff 精确地减去两个日期时间值作为秒或毫秒并转换为等效的日期值。

或者,是因为操作系统的区域和语言设置?

提前致谢

【问题讨论】:

    标签: .net sql sql-server vb.net sql-server-2008


    【解决方案1】:

    实际上 VB.NET 表达式正在返回正确的值,因为 hours 的总数不等于 48 。因此它返回 1

    在 SQL Server 中,DateDiff 函数返回一个舍入值。

    尝试将该值除以一天中的总秒数,即86400.0

    SELECT @Date1, @Date2, DATEDIFF(ss,@Date1,@Date2) /86400.0
    

    返回的值将是1.9999421 而不是2

    以秒为单位的 2 个日期之间的差异是 172795,它小于 172800(2 天的总秒数)。因此,如果您不四舍五入结果,该函数应该只返回 1

    【讨论】:

      【解决方案2】:

      Day DateDiff 向下舍入返回的数字。尝试返回小时数并除以 24 以获得天数

      DateDiff(DateInterval.Hour,Convert.ToDateTime("26-12-2012 12:00:05 AM"), 
      Convert.ToDateTime("28-12-2012 12:00:00 AM"))/24
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2019-02-04
        • 1970-01-01
        相关资源
        最近更新 更多