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.

War es hilfreich?

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


Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top