small formato fecha example entre ejemplos diferencia convert sql-server tsql datetime sql-server-2005 dateadd

sql-server - formato - small time sql server



Resta un minuto de DateTime en SQL Server 2005 (5)

Has probado

SELECT DATEADD(mi, -15,''2000-01-01 08:30:00'')

DATEDIFF es la diferencia entre 2 fechas.

Supongamos que tengo un campo de fecha y hora cuyo valor es 2000-01-01 08:30:00 y un campo de duración cuyo valor es, por ejemplo, 00:15 (lo que significa 15 minutos)

Si resto estos dos, debería obtener 2000-01-01 08:15:00

Además, si quiero restar 1:15 (significa 1 hora y 15 minutos), la salida debe ser 2000-01-01 07:15:00

Estoy probando SELECT DATEDIFF(minute, ''00:15'',''2000-01-01 08:30:00'');

Pero la salida es 52595055. ¿Cómo puedo obtener el resultado deseado?

NB ~ Si hago SELECT dateadd(minute, -15,''2000-01-01 08:30:00''); Obtendré el resultado deseado, pero eso implica analizar el campo de los minutos.

Editar:

Según las respuestas, cada uno sugiere convertir todo en minutos y luego restar, así que si son las 1:30, necesito restar 90 minutos. Esta bien. ¿Alguna otra manera sin convertir a minutos?


Pasé un tiempo tratando de hacer lo mismo, tratando de restar las hours:minutes de datetime : así es como lo hice:

convert( varchar, cast((RouteMileage / @average_speed) as integer))+ '':'' + convert( varchar, cast((((RouteMileage / @average_speed) - cast((RouteMileage / @average_speed) as integer)) * 60) as integer)) As TravelTime, dateadd( n, -60 * CAST( (RouteMileage / @average_speed) AS DECIMAL(7,2)), @entry_date) As DepartureTime

SALIDA:

DeliveryDate TravelTime DepartureTime 2012-06-02 12:00:00.000 25:49 2012-06-01 10:11:00.000


Quieres usar DATEADD , usando una duración negativa. p.ej

DATEADD(minute, -15, ''2000-01-01 08:30:00'')


Use DATEPART para separar su intervalo y DATEADD para restar las partes:

select dateadd( hh, -1 * datepart(hh, cast(''1:15'' as datetime)), dateadd( mi, -1 * datepart(mi, cast(''1:15'' as datetime)), ''2000-01-01 08:30:00''))

o, podemos convertir a minutos primero (aunque OP preferiría no hacerlo):

declare @mins int select @mins = datepart(mi, cast(''1:15'' as datetime)) + 60 * datepart(hh, cast(''1:15'' as datetime)) select dateadd(mi, -1 * @mins, ''2000-01-01 08:30:00'')


SELECT DATEADD(minute, -15, ''2000-01-01 08:30:00'');

El segundo valor (-15 en este caso) debe ser numérico (es decir, no una cadena como ''00: 15 ''). Si necesita restar horas y minutos, recomendaría dividir la cadena en: para obtener las horas y los minutos y restar usando algo como

SELECT DATEADD(minute, -60 * @h - @m, ''2000-01-01 08:30:00'');

donde @h es la parte de la hora de tu cadena y @m es la parte de los minutos de tu cadena

EDITAR:

Aquí hay una manera mejor:

SELECT CAST(''2000-01-01 08:30:00'' as datetime) - CAST(''00:15'' AS datetime)