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)