Question

Comment puis-je obtenir tout le temps comme ça datediff(time, logindate, logoutdate)

Je sais que cette fonction intégrée n'accepte pas l'argument de temps, mais comment puis-je obtenir tout le temps plutôt que de minutes, milliseconde, deuxième, etc.?

logindate datetime2
logoutdate datetime2

Je veux quelque chose comme 01:05:45 plutôt que partie.

Était-ce utile?

La solution

Essayer cette

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

En fait, en ajoutant la différence entre les minutes dates à la première date de SQL valide et retourner la valeur formatée comme un temps.

Autres conseils

Pour avoir une différence dans les jours:

select cast(logoutdate - logindate as float) from table_name

ou tout simplement

select logoutdate - logindatefrom table_name

Vous pouvez évaluer jours, heures, minutes de celui-ci.

EDIT

Pour avoir formaté le temps:

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

Il ne fonctionnera que si les utilisateurs ne sont pas connectés pendant plus de 24 heures, parce que CONVERT est utilisé pour formater datetime, non timespan.

Parce que MSSQL ne pas timepsan type de données, datediff retour en entier absolu de millisecondes à des années devrait être suffisant pour vous de créer une instance de dire TimeSpan dans .NET.

Quelle est la version Sql Server parlez-vous? Dans SQL Server 2000 et plus tard, au moins,

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

vous donnera la différence entre ces deux dates en quelques secondes.

par exemple. select convert (varchar (10), GETDATE (), 108)

Voici la solution que vous recherchez.


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


Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top