Restar un día de la fecha y hora

102

Tengo una consulta para obtener la diferencia de fecha entre 2 fechas y hora como:

SELECT DATEDIFF(DAY, @CreatedDate , GETDATE())

Ex :

SELECT DATEDIFF(DAY, '2013-03-13 00:00:00.000' , GETDATE())

Necesito que una consulta funcione como esta, que restará un día del día creado:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())
James
fuente
1
¿Por qué no agregar 1 al resultado?
Damien_The_Unbeliever
Si restar 1 del resultado da la respuesta deseada, entonces la pregunta que ha planteado parece incorrecta, ya que restar del resultado equivale a agregar un número de días a la primera de las fechas.
Damien_The_Unbeliever
Entonces, la expresión que publicaste como tu primera respuesta para mí es la que yo usaría; podrías publicarla como una respuesta, pero como digo, significa que tu pregunta no es realmente correcta (el DATEDIFFmedio 2003-03-12y hoy es 14 , no 12).
Damien_The_Unbeliever
Sí ... tienes razón ... funciona como lo contrario con los resultados ..
James

Respuestas:

124

Prueba esto

SELECT DATEDIFF(DAY,  DATEADD(day, -1, '2013-03-13 00:00:00.000'), GETDATE())

O

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())
yogui
fuente
3
Siguiendo la respuesta de Philip Rego, puede usar SELECT GETDATE () - 1 para restar días de una fecha.
José Barbosa
44

No estoy seguro de qué es exactamente lo que está tratando de hacer, pero creo que esta función SQL lo ayudará:

SELECT DATEADD(day,-1,'2013-04-01 16:25:00.250')

Lo anterior te dará 2013-03-31 16:25:00.250.

Lo lleva atrás exactamente un día y funciona en cualquier formato de fecha y hora estándar.

Intente ejecutar este comando y vea si le da lo que está buscando:

SELECT DATEADD(day,-1,@CreatedDate)
Chris
fuente
33

Para restar simplemente un día de la fecha de hoy:

Select DATEADD(day,-1,GETDATE())

(la publicación original usó -7 y era incorrecta)

FoxDeploy
fuente
24

Aparentemente, puede restar el número de días que desee de una fecha y hora.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403
Philip Rego
fuente
6

Esto debería funcionar.

select DATEADD(day, -1, convert(date, GETDATE()))
samithagun
fuente
1
SELECT DATEDIFF (
    DAY, 
    DATEDIFF(DAY, @CreatedDate, -1), 
    GETDATE())
Daniel Imms
fuente
1

Prueba esto, que esto te ayude

SELECT DATEDIFF(DAY, DATEADD(DAY,-1,'2013-03-13 00:00:00.000') , GETDATE())
Vijay Singh Rana
fuente
1

Para ser honesto, solo uso:

select convert(nvarchar(max), GETDATE(), 112)

que da YYYYMMDDy menos uno.

O más correctamente

select convert(nvarchar(max), GETDATE(), 112) - 1 

para la fecha de ayer.

Reemplazar Getdate()con su valorOrderDate

select convert(nvarchar (max),OrderDate,112)-1 AS SubtractDate FROM Orders

Deberías hacerlo.

meekon5
fuente
-1

Puedes probar esto.

Marca de tiempo = 2008-11-11 13: 23: 44.657;

SELECT DATE_SUB(OrderDate,INTERVAL 1 DAY) AS SubtractDate FROM Orders

salida: 2008-11-10 13: 23: 44.657

Espero que ayude a resolver su problema.

chintan
fuente
2
Servidor SQL. No admite INTERVALni DATE_SUB.
Damien_The_Unbeliever
SELECCIONE DATEADD (día, 45, OrderDate) FROM Orders. ¿Lo tienes?
chintan