使用select和cast进行时间计算

时间:2019-05-07 21:23:38

标签: sql date select time

我正在选择不同的日期和时间字段,并希望以小时为单位计算它们之间的差异。我正在使用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

2 个答案:

答案 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