Conseguir el Tiempo Total
-
20-09-2019 - |
Pregunta
¿Cómo puedo obtener todo el tiempo como éste datediff(time, logindate, logoutdate)
Sé que esta función incorporada no acepta el argumento tiempo, pero ¿cómo puedo obtener todo el tiempo en lugar de minutos, milisegundo, segundo, etc.?
logindate datetime2
logoutdate datetime2
Quiero algo como 01:05:45 en lugar de parte de ella.
Solución
Probar
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
Básicamente, la adición de la diferencia entre las fechas minutos a la fecha más temprana SQL válida y devolver el valor con formato como un tiempo.
Otros consejos
Para tener diferencia en días:
select cast(logoutdate - logindate as float) from table_name
o simplemente
select logoutdate - logindatefrom table_name
Puede evaluar días, horas, minutos de ella.
Editar
Para tenerlo con formato de tiempo:
SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT
Se trabajará si los usuarios no se registran durante más de 24 horas, porque CONVERTIR se utiliza para dar formato de fecha y hora, no lapso de tiempo.
Debido a MSSQL no tiene tipo de datos timepsan, datediff
volver en absoluto número entero de milisegundos a años debería ser suficiente para que pueda crear una instancia de, digamos, TimeSpan
en .NET.
¿Qué versión de SQL Server se está hablando? En SQL Server 2000 y versiones posteriores, al menos,
SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420')
le dará la diferencia entre esos dos datetimes en cuestión de segundos.
por ejemplo. seleccione CONVERT (varchar (10), GETDATE (), 108)
Esta es la solución que está buscando.
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