Как получить время между двумя столбцами типа time? - PullRequest
3 голосов
/ 26 июня 2011

У меня есть таблица в SQL Server

id int, 
enters time, 
left time, 
date datetime,
user varchar(50)

Теперь я хочу получить разницу во времени между enters и lefts, но я получаю это сообщение об ошибке:

Msg 8117, Уровень 16, Состояние 1, Строка 1
Недопустимый тип данных операнда для оператора вычитания.

Как узнать, сколько времени прошло?
Например,если пользователь входит в 8.00 и уходит в 9.15, мне нужно получить 1.15.
Как я могу это сделать?

Ответы [ 4 ]

4 голосов
/ 26 июня 2011
declare @MyTable table(enters time, lefttime time)
insert @MyTable values('8:00', '9:05')

select *,
    cast(datediff(hour, enters, lefttime) as varchar) + ':' + 
        right('0' + cast(datediff(minute, enters, lefttime) % 60 as varchar), 2)
from @MyTable

[EDIT]

Добавлен 0 отступ, чтобы не показывать 1:5 вместо 1:05.


Еще один способ сделать это:

select cast(dateadd(minute, datediff(minute, enters, lefttime), 0) as time)
from @MyTable

Результат будет типа time, а не varchar.

3 голосов
/ 26 июня 2011

Посмотрите на функцию DATEDIFF .

DECLARE @enters datetime = CAST('2011-06-26T08:00:00' as datetime);
DECLARE @left datetime = CAST('2011-06-26T09:15:00' as datetime);

SELECT CAST(DATEDIFF(HH, @enters, @left) as varchar(max)) 
    + ':' + CAST(DATEDIFF(MI, @enters, @left) % 60 as varchar(max))
1 голос
/ 27 июня 2011
select
     id
    ,enters
    ,[left]
    ,date
    ,[user]
    ,CONVERT(time,DATEADD(second, DATEDIFF(second,enters,[left]), 0)) as [Difference]
from
    MyTable
0 голосов
/ 27 июня 2011

Простой метод -

преобразование ДАТЫ в тип данных времени

convert ()

, а затем использование подстроки для нахождения разницы на основе позиции

между подстрокой (дата, 0,0) и временем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...