2012-03-01 13 views

Odpowiedz

107

Zobacz funkcję DateDiff().

-- Syntax 
-- DATEDIFF (datepart , startdate , enddate) 

-- Example usage 
SELECT DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDiff 
SELECT DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDiff 
SELECT DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDiff 
SELECT DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDiff 
SELECT DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDiff 
... 

Można zobaczyć go w akcji/play with it here

0

Spójrz na DATEDIFF, to powinno być to, czego szukasz. Są to dwie daty, które porównujesz, oraz jednostka daty, w której chcesz uzyskać różnicę (dni, miesiące, sekundy ...).

18

Można użyć funkcji DATEDIFF uzyskać różnicę minuty, sekundy, dni itp

SELECT DATEDIFF(MINUTE,job_start,job_end) 

MINUTE oczywiście zwraca różnicę minut, możesz również użyć DAY, HOUR, SECOND, YEAR (patrz link online książek dla pełnej listy).

Jeśli chcesz dostać fantazję można pokazać to w różny sposób, na przykład 75 minut mogą być wyświetlane tak: 01: 15: 00: 0

Oto kod, aby to zrobić zarówno dla SQL Server 2005 i 2008

-- SQL Server 2005 
SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000'),114) 

-- SQL Server 2008 
SELECT CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000') AS TIME) 
+0

51 sekund za późno! Tak czy inaczej, głosowałem na twoją odpowiedź, więc nie ma żadnych ostrych uczuć. –

+1

@JamesHill Dziękuję James, brzmisz jak potrzebujesz wakacji! Więc przegłosowałem twoją odpowiedź. –

+0

@some_bloody_fool, (: dziękuję, prawdopodobnie masz rację! –

10

Rzuć wynik jako TIME, a wynik będzie w formacie czasu dla długości interwału.

select CAST(job_end - job_start) AS TIME(0)) from tableA 
+2

Cudownie, właśnie to dokładnie szukam.dzięki! – Srini

2

Jeśli typ czasu bazie StartTime = 07:00:00 i endtime = 14:00:00, a oba. Zapytanie aby uzyskać różnicę czasu będzie:

SELECT TIMEDIFF(Time(endtime), Time(StartTime)) from tbl_name 

Jeśli baza danych startDate = 2014-07-20 07:00:00 i EndTime = 2014-07-20 23:00:00, można również korzystać z tej kwerendy.

0

Spróbuj tego w SQL Server

SELECT 
     start_date as firstdate,end_date as seconddate 
     ,cast(datediff(MI,start_date,end_date)as decimal(10,3)) as minutediff 
     ,cast(cast(cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60) as int) as varchar(10)) + ' ' + 'Days' + ' ' 
     + cast(cast((cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60) - 
     floor(cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60))) * 24 as int) as varchar(10)) + ':' 

    + cast(cast(((cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60) 
     - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60)))*24 
     - 
     cast(floor((cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60) 
     - floor(cast(datediff(MI,start_date,end_date)as decimal(10,3))/(24*60)))*24) as decimal)) * 60 as int) as varchar(10)) 

    FROM [AdventureWorks2012].dbo.learndate 
5

myślę, że trzeba tę lukę czasową między job_start & job_end.

Spróbuj tego ...

select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA 

skończyło się z tym.

01:14:37 
2

stwierdzenie termin rozpoczęcia i zakończenia DECLARE @SDATE AS DATETIME

TART_DATE AS DATETIME 
DECLARE @END_-- Set Start and End date 
SET @START_DATE = GETDATE() 
SET @END_DATE = DATEADD(SECOND, 3910, GETDATE()) 

- uzyskać wynik w HH: ss:: MMM formatu (24h) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff

0

Poniżej kod daje w hh MI : format mm.

select RIGHT (LEWO (job_end- job_start, 17), 5)

+1

Myślę, że to nie jest dokładnie tym, o co prosi OP. Wykorzystanie DATE_DIFF powinno pomóc ... – Tyron78

+0

Oczywiście, poprawię to. –

0

użyłem następujących logiki i pracował dla mnie jak cud:

CONVERT(TIME, DATEADD(MINUTE, DATEDIFF(MINUTE, AP.Time_IN, AP.Time_OUT), 0)) 
Powiązane problemy