我正在选择不同的日期和时间字段,并希望以小时为单位计算它们之间的差异。我正在使用datediff来获取以分钟为单位的差异,但是当我除以60时,我得到的却是零。
尝试转换为十进制和实数
select
,[Call_Date]
,[Call_Time]
,convert(DATETIME, convert(char(8), call_date, 112)+ ' ' + convert(char(8), Call_time, 108)) as Call_DT
,[Roll_Time_Date]
,[Roll_Time_Time]
,convert(DATETIME, convert(char(8), Roll_time_date, 112)+ ' ' + convert(char(8), Roll_time_time, 108)) as Roll_DT
,cast(datediff(mi, (convert(DATETIME, convert(char(8), call_date, 112)+ ' ' + convert(char(8), Call_time, 108))),
(convert(DATETIME, convert(char(8), Roll_time_date, 112)+ ' ' + convert(char(8), Roll_time_time, 108))))/60 as decimal)
As Downtime
FROM [MFSQL_DTFM].[dbo].[MFWorkOrder] where Customer='Joe'
样本数据:
Call_Date Call_Time Call_DT Roll_Time_Date Roll_Time_Time Roll_DT Downtime
2019-04-01 15:39:00 2019-04-01 15:39:00.000 2019-04-02 13:01:00 2019-04-02 13:01:00.000 21
2019-04-01 15:54:00 2019-04-01 15:54:00.000 2019-04-01 17:10:00 2019-04-01 17:10:00.000 1
2019-04-01 16:15:00 2019-04-01 16:15:00.000 2019-04-01 21:30:00 2019-04-01 21:30:00.000 5
答案 0 :(得分:1)
将60 AS十进制更改为60.0
这将默认使值成为小数,而不必从int转换。
答案 1 :(得分:0)
也许这样会起作用?
with mainTimes as (
select
Call_Date
,Call_Time
,convert(DATETIME, convert(char(8), call_date, 112)+ ' ' + convert(char(8), Call_time, 108)) as Call_DT
,Roll_Time_Date
,Roll_Time_Time
,convert(DATETIME, convert(char(8), Roll_time_date, 112)+ ' ' + convert(char(8), Roll_time_time, 108)) as Roll_DT
from [MFSQL_DTFM].[dbo].[MFWorkOrder]
where Customer='Joe'
)
select *,
datediff(mi,Call_DT,RollDT)/60.0 as Downtime
from mainTimes