Что-то вроде этого должно работать. Это просто взломать; вам лучше было бы изменить базовую таблицу для хранения времени в типе данных DATE.
Идея состоит в том, что минуты минутного времени меньше, чем на time_in, чтобы вычесть 1 из часов в time_out и добавить 60 минут. Это так же, как вычитание 0,4 при работе с десятичными знаками. Так что это именно то, что делает решение.
Итак, да, это можно сделать, и это легко сделать - это просто не то, что нужно делать. Удачи!
with
inputs (time_in, time_out) as (
select 9.45, 12.06 from dual union all
select 10.20, 14.02 from dual
)
select time_in, time_out,
case when time_out - trunc(time_out) >= time_in - trunc(time_in)
then time_out - time_in
else time_out - time_in - 0.4 end as difference
from inputs;
TIME_IN TIME_OUT DIFFERENCE
9.45 12.06 2.21
10.2 14.32 4.12
Вы делаете это на MySQL, SQL Server И Oracle? Все три? Если нет, пожалуйста, удалите сообщение и удалите теги, которые не применяются. И если вы не знаете, что такое plsql, удалите это. (Или, если вы знаете, и вы понимаете, что вопрос не имеет ничего общего с PL/SQL.) – mathguy
Time_In и Time_Out - NUMBER тип данных? Что означает 12.40? Вы просто вводите время как десятичное число, поэтому, если время 12:40, вы будете вводить 12.4? Очень странно! Тогда - всегда ли «времена» всегда будут действительными, поэтому у вас никогда не будет 13,83 или 42,04? Всегда ли они в одну дату, а time_out всегда больше или равно time_in? Самое главное, ** почему два столбца типа данных NUMBER, а не правильный тип данных, DATE **? – mathguy
На самом деле я работаю над процедурой PL/SQL, которая берет биометрические данные, которые дают time_in и time_out, как это, мне просто нужна формула для расчета отработанных часов. – Beginner