Ottenere il tempo intero
-
20-09-2019 - |
Domanda
Come posso ottenere per tutto il tempo come questo datediff(time, logindate, logoutdate)
So che questa funzione built-in non accetta le argomentazioni tempo, ma come posso ottenere tutto il tempo piuttosto che minuto, millisecondo, secondo ecc?
logindate datetime2
logoutdate datetime2
Voglio qualcosa di simile 01:05:45 piuttosto che parte di esso.
Soluzione
Prova questo
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
In sostanza, aggiungendo la differenza minuti tra le date per la prima data SQL valido e restituendo il valore formattato come un tempo.
Altri suggerimenti
Per avere differenza in giorni:
select cast(logoutdate - logindate as float) from table_name
o semplicemente
select logoutdate - logindatefrom table_name
È possibile valutare giorni, ore, minuti da esso.
Modifica
Per lo hanno formattato come il tempo:
SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT
Si lavorerà se gli utenti non sono connessi per più di 24 ore, a causa CONVERTI viene utilizzato per formattare datetime, non periodo.
A causa MSSQL non hanno tipo di dati timepsan, datediff
tornare in assoluto intero da millisecondi a anni dovrebbe essere sufficiente per la creazione di un'istanza di dire TimeSpan
in .NET.
Cosa Sql Server versione stai parlando? In SQL Server 2000 e versioni successive, almeno,
SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420')
vi darà la differenza tra questi due datetimes in secondi.
es. selezionare CONVERT (varchar (10), GETDATE (), 108)
Ecco la soluzione che state cercando.
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