Avatar billede hedemann Nybegynder
25. maj 2007 - 13:46 Der er 5 kommentarer og
1 løsning

Beregn tidsforskel

Hvordan beregnen man tidsforskellen mellem to datofelter.

Kender godt Datediff - men den regne kun på hele timer, minutter eller sekunder. Og det jeg skal er bruge er metode/funktion der beregner flg.

"1900-01-01 02:30:00.000" - "1900-01-01 02:17:19.000" = +12:41

og

"1900-01-01 02:30:00.000" - "1900-01-01 02:33:00.000" = -0:03
Avatar billede teepee Nybegynder
25. maj 2007 - 14:58 #1
Avatar billede hedemann Nybegynder
25. maj 2007 - 15:51 #2
Den virker ikke, hvis tidsforskellen er mindre ned 10 minutter på de to tider eller hvis det er ens tider..
Avatar billede dr_chaos Nybegynder
26. maj 2007 - 21:58 #3
Jeg har lavet denne her:

DECLARE @start datetime , @End Datetime

SET @start ='2007-05-26 21:45:40.287'
SELECT TOP 100 * FROM stamdata
SET @End = '2007-05-26 22:46:51.297'

select /*Cast(Left(CAST(DateDiff(ss, @start, @end)/60 as float)/60,
CharIndex('.', CAST(DateDiff(ss, @start, @end)/60 as float)/60)-1)
as varchar) + ':' +
Cast(Round(Cast(Substring(CAST(CAST(DateDiff(ss, @start, @end)/60
as float)/60 AS varchar),
CharIndex('.', CAST(DateDiff(ss, @start, @end)/60
as float)/60),4) as float)*60,0) as varchar) AS TimeHourMin,*/
@start DateTime1, @end DateTime2,
convert(varchar, @start, 114) AS Time1,
convert(varchar, @end, 114) AS Time2,
DateDiff(s, @end, @start) TimeDifferences,
CASE WHEN DateDiff(ms, @end, @start)<0 THEN '-' END,
RIGHT('0'+RTRIM(abs(DateDiff(hh, @end, @start))%60),2) AS Hour,
RIGHT('0'+RTRIM(abs(DateDiff(mi, @end, @start))%60),2) AS Min,
RIGHT('0'+RTRIM(abs(DateDiff(s, @end, @start))%60),2) AS Sek,
RIGHT('0'+RTRIM(abs(DateDiff(ms, @end, @start)%100)),2) AS milisek,
CASE WHEN DateDiff(ms, @end, @start)<0 THEN '-' END+
RIGHT('0'+RTRIM(abs(DateDiff(hh, @end, @start))%60),2)+':'+
RIGHT('0'+RTRIM(abs(DateDiff(mi, @end, @start))%60),2)+':'+
RIGHT('0'+RTRIM(abs(DateDiff(s, @end, @start))%60),2) AS TimeDiff
Avatar billede dr_chaos Nybegynder
26. maj 2007 - 22:00 #4
CASE WHEN DateDiff(ms, @end, @start)<0 THEN '-' END bruges til at bestemme om tallet er positivt eller negativt.
Muligvis skal den ændres til
CASE WHEN DateDiff(ss, @end, @start)<0 THEN '-' END
Hvis du kun vil bruge sekunder.


Den vigtige del er:
CASE WHEN DateDiff(ms, @end, @start)<0 THEN '-' END+
RIGHT('0'+RTRIM(abs(DateDiff(hh, @end, @start))%60),2)+':'+
RIGHT('0'+RTRIM(abs(DateDiff(mi, @end, @start))%60),2)+':'+
RIGHT('0'+RTRIM(abs(DateDiff(s, @end, @start))%60),2) AS TimeDiff
Du kan tilføje millisekunder hvis nødvendigt.
Avatar billede hedemann Nybegynder
13. september 2007 - 15:32 #5
dr chaos, send venligt et svar - jeg skylder dig nogle point
Avatar billede dr_chaos Nybegynder
13. september 2007 - 20:23 #6
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester