operaciones - diferencia en dias entre dos fechas sql server
Cómo comparar dos fechas para encontrar la diferencia horaria en SQL Server 2005, manipulación de fechas (10)
A continuación, el código se entrega en formato hh: mm.
seleccione DERECHA (IZQUIERDA (job_end- job_start, 17), 5)
Tengo dos columnas:
job_start job_end
2011-11-02 12:20:37.247 2011-11-02 13:35:14.613
¿Cómo sería posible usar T-SQL para encontrar la cantidad de tiempo sin procesar que pasó entre el inicio del trabajo y el final del trabajo?
Intenté esto:
select (job_end - job_start) from tableA
pero terminó con esto:
1900-01-01 01:14:37.367
Creo que necesitas el intervalo de tiempo entre job_start y job_end .
Prueba esto...
select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
Terminé con esto.
01:14:37
Declare la fecha de inicio y final 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())
- Obtenga el resultado en HH: MI: SS: formato MMM (24H) SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff
Echa un vistazo a DATEDIFF , esto debería ser lo que estás buscando. Toma las dos fechas que está comparando, y la unidad de fecha en la que desea la diferencia (días, meses, segundos ...)
Eche el resultado como TIME
y el resultado estará en formato de tiempo por la duración del intervalo.
select CAST(job_end - job_start) AS TIME(0)) from tableA
Eche un vistazo a la función 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
...
Puedes verlo en acción / jugar con él aquí
Pruebe esto en el servidor Sql
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
Puede usar la función DATEDIFF para obtener la diferencia en minutos, segundos, días, etc.
SELECT DATEDIFF(MINUTE,job_start,job_end)
MINUTE obviamente devuelve la diferencia en minutos, también puede usar DAY, HOUR, SECOND, YEAR (consulte el enlace en línea de los libros para obtener la lista completa).
Si quieres ser elegante, puedes mostrar esto de otra manera; por ejemplo, 75 minutos podrían mostrarse así: 01: 15: 00: 0
Aquí está el código para hacer eso para SQL Server 2005 y 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)
Si su base de datos es StartTime = 07:00:00
y endtime = 14:00:00
, y ambas son tipo de hora. Su consulta para obtener la diferencia horaria sería:
SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name
Si su base de datos startDate = 2014-07-20 07:00:00
y endtime = 2014-07-20 23:00:00
, también puede usar esta consulta.
Utilicé la siguiente lógica y funcionó para mí como maravilla:
CONVERT(TIME, DATEADD(MINUTE, DATEDIFF(MINUTE, AP.Time_IN, AP.Time_OUT), 0))