Использование select с cast для вычисления времени - PullRequest
0 голосов
/ 08 мая 2019

Я делаю выбор различных полей даты и времени и хочу вычислить разницу между ними в долях часа. Я использую датировку, чтобы получить разницу в минутах, но когда я делю на 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 ]

1 голос
/ 08 мая 2019

Измените десятичное число 60 AS на 60.0

. По умолчанию это значение будет десятичным, вместо того, чтобы преобразовывать из целого числа.

0 голосов
/ 08 мая 2019

Может быть, что-то подобное будет работать?

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
...