Получать все время - PullRequest
       9

Получать все время

2 голосов
/ 15 ноября 2009

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

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

logindate datetime2
logoutdate datetime2

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

Ответы [ 6 ]

4 голосов
/ 15 ноября 2009

Попробуйте это

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 голос
/ 15 ноября 2009

Разница в днях:

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 используется для форматирования даты, а не времени.

0 голосов
/ 15 ноября 2009

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


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


0 голосов
/ 15 ноября 2009

например. выберите CONVERT (varchar (10), GETDATE (), 108)

0 голосов
/ 15 ноября 2009

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

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

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

0 голосов
/ 15 ноября 2009

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

...