SQL DATEDIFF结果与Excel在小时数上的差异
我们一直在努力寻找解决这个问题的方法 我们正在远离excel,通过减去两个日期,在几小时内将计算结果添加到SQL中 问题是我们在excel中的结果与SQL不同 这是excel中的内容:SQL DATEDIFF结果与Excel在小时数上的差异,sql,sql-server,excel,Sql,Sql Server,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)
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.266667
使用DATEDIFF将相同的数据导入SQL(语法如下):
给出结果:26.350000
有人对如何解决这一矛盾有想法吗
提前感谢你
朱莉安娜检查你的输入。你的逻辑是正确的,尽管可以简化。为清晰起见,请在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
我确实得到了同样的价值,但我无法重现这个问题。我也没有得到不同。此外,在您的情况下,不需要将值强制转换为SMALLDATETIME。不强制转换就检查它:DATEDIFF(秒,CONVERT(DATETIME,Service_-Date,103)+CONVERT(DATETIME,Service_-Time,103),CONVERT(DATETIME,Change_-Date,103)+CONVERT(DATETIME,Change_-Time,103))/3600.0请检查
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