首页 > 解决方案 > SQL DATEDIFF 结果在几小时内与 Excel 不同

问题描述

一直在努力寻找解决此问题的方法。

我们正在远离 Excel,并通过减去两个日期在几小时内将计算添加到 SQL 中。

问题是我们在 excel 中的结果与 SQL 不同。

这是我们在 excel 中的内容:

Change Date: 30/10/2018      
Change Time: 10:53

Service Date: 29/10/2018    
Service Time: 9:37      

The Formula in excel is: =((Change Date+Change Time)-(Service Date+Service Time))*24

小时分数的结果是:25.26666667

使用 DATEDIFF 导入 SQL 的相同数据(语法如下):

datediff(second,CAST(CAST(CONVERT(DATETIME,Service_Date,103) as smalldatetime) 
            + CAST(CONVERT(DATETIME,Service_Time,103) as smalldatetime) as smalldatetime),
            CAST(CAST(CONVERT(DATETIME,Change_Date,103) as smalldatetime) 
            + CAST(CONVERT(DATETIME,Change_Time,103) as smalldatetime) as smalldatetime)) /3600.0

给出结果:26.350000

有谁知道如何解决这种差异?

提前致谢,

朱莉安娜

标签: sqlsql-serverexcel

解决方案


检查您的输入。您的逻辑是正确的,尽管可以简化。为了清楚起见,在 SSMS 中运行下面的代码示例。

declare @Service_Date varchar(max) = '30/10/2018'
declare @Service_Time varchar(max) = '10:53'

declare @Change_Date varchar(max) = '29/10/2018'
declare @Change_Time varchar(max) = '9:37'

--
-- Original 
--
select datediff(second,CAST(CAST(CONVERT(DATETIME,@Service_Date,103) as smalldatetime) 
            + CAST(CONVERT(DATETIME,@Service_Time,103) as smalldatetime) as smalldatetime),
            CAST(CAST(CONVERT(DATETIME,@Change_Date,103) as smalldatetime) 
            + CAST(CONVERT(DATETIME,@Change_Time,103) as smalldatetime) as smalldatetime)) /3600.0

--
-- Simplified - same result
--
select datediff(second,
    (CONVERT(smalldatetime,@Service_Date,103) + CONVERT(smalldatetime,@Service_Time,103)),
    (CONVERT(smalldatetime,@Change_Date,103) + CONVERT(smalldatetime,@Change_Time,103))) /3600.0

--
-- Simplfied - shows error is with inpuyts, not logic
--
set @Service_Time = '11:57'
set @Change_Time = '9:36'
select datediff(second,
    (CONVERT(smalldatetime,@Service_Date,103) + CONVERT(smalldatetime,@Service_Time,103)),
    (CONVERT(smalldatetime,@Change_Date,103) + CONVERT(smalldatetime,@Change_Time,103))) /3600.0

推荐阅读