2009-11-15 2 views
2

Как я могу получить все время, как этот datediff(time, logindate, logoutdate)Получение всего времени

Я знаю, что это встроенная функция не принимает аргумент времени, но как я могу получить все время, а не минуты, миллисекунды, второй и т.д. .?

logindate datetime2 
logoutdate datetime2 

Я хочу что-то вроде 1:05:45, а не его часть.

ответ

4

Попробуйте

create table dbo.UserLog (UserID VARCHAR(32),loginDate DATETIME,logoutDate DATETIME) 

insert into userLog VALUES ('SPARKY','11/14/2009 3:25pm',getDate()) 
insert into userLog VALUES ('JANNA','11/14/2009 10:45am',getDate()) 

select UserId,loginDate,logoutDate, 
    convert(varchar(12),dateAdd(mi,datediff(mi,logindate,logoutdate),'Jan 1 1753 12:00AM'),114) as timeSpent 
FROM userLog 

В принципе, добавив разницу минут между датами самой ранней датой действительной SQL и возвращает значение форматируется как время.

1

Чтобы иметь разницу в днях:

select cast(logoutdate - logindate as float) from table_name 

или просто

select logoutdate - logindatefrom table_name 

Вы можете оценить дни, часы, минуты от него.

EDIT

, чтобы он отформатирован время:

SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT 

Это будет работать, если пользователи не вошли в течение более 24 часов, потому что CONVERT используется для форматирования DateTime, не TimeSpan.

0

Поскольку MSSQL не имеет типа данных timepsan, datediff, возвращающихся в абсолютное целое число от миллисекунд до нескольких лет, должно быть достаточно для создания экземпляра, например, TimeSpan в .NET.

0

О какой серверной версии Sql вы говорите? В SQL Server 2000 и более поздних версиях, по крайней мере,

SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420') 

даст вам разницу между этими двумя датами в секундах.

+0

SQL Server, но я хочу что-то вроде 1:05:45, а не его часть. – Tarik

+0

Я имею в виду SQL Server 2008 – Tarik

0

E.g. выберите CONVERT (varchar (10), GETDATE(), 108)

0

Вот решение, которое вы ищете.

 

DECLARE @Date1 datetime 
DECLARE @Date2 datetime 
SET @Date2 = '2006-11-15 07:26:25.000' 
SET @Date1 = '2009-11-15 05:35:45.000' 
--   ----------------------- 
-- Math done by hand  1:50:40 
-- 
DECLARE @TotalSeconds bigint 
DECLARE @Hours  bigint 
DECLARE @Minutes  bigint 
DECLARE @Seconds  bigint 
DECLARE @HH   varchar(20) 
DECLARE @MM   varchar(2) 
DECLARE @SS   varchar(2) 
DECLARE @Result  varchar(50) 
-- 
SET @TotalSeconds = datediff(ss,@Date1 ,@Date2) 
SET @Hours  = FLOOR(@TotalSeconds/3600) 
SET @TotalSeconds = @TotalSeconds % 3600 
SET @Minutes  = FLOOR(@TotalSeconds/60) 
SET @Seconds  = @TotalSeconds % 60 
-- 
SET @HH = CAST(@Hours as varchar) 
SET @MM = CAST(@Minutes as varchar) 
SET @SS = CAST(@Seconds as varchar) 
IF @Minutes < 10 SET @MM = '0' + @MM 
IF @Seconds < 10 SET @SS = '0' + @SS 
-- 
SET @Result = @HH + ':' + @MM + ':' + @SS 
SELECT @Result