Immer die ganze Zeit
-
20-09-2019 - |
Frage
Wie kann ich die ganze Zeit wie dieser datediff(time, logindate, logoutdate)
bekomme
Ich weiß, die integrierte Funktion nicht Zeit Argument akzeptieren, aber wie kann ich die ganze Zeit statt Minute bekommen, Millisekunden, Sekunden usw.?
logindate datetime2
logoutdate datetime2
Ich mag so etwas wie 01.05.45, anstatt Teil davon.
Lösung
Versuchen Sie, diese
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
Grundsätzlich Hinzufügen der Minuten Differenz zwischen den Daten zu dem frühesten gültigen SQL-Datum und den Wert als Zeit formatierte zurück.
Andere Tipps
Zum Unterschied in Tagen:
select cast(logoutdate - logindate as float) from table_name
oder
select logoutdate - logindatefrom table_name
Sie können Tage bewerten, Stunden, Minuten davon entfernt.
Bearbeiten
Um es als Zeit formatiert:
SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT
Es wird funktionieren, wenn Anwender nicht länger als 24 Stunden angemeldet ist, weil CONVERT verwendet wird Datetime-Format, nicht Zeitspanne.
Da MSSQL nicht timepsan Datentyp hat, datediff
in absoluter Zahl von Millisekunden bis Jahre zurückkehren sollte genug für Sie eine Instanz von etwa TimeSpan
in .NET erstellen.
Was ist SQL Server-Version reden Sie? In SQL Server 2000 und höher, zumindest,
SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420')
geben Sie den Unterschied zwischen diesen beiden Datetimes in Sekunden.
z. wählen CONVERT (VARCHAR (10), GETDATE (), 108)
Hier ist die Lösung, die Sie suchen.
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