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.

¿Fue útil?

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


Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top