Sottrai un giorno da datetime


102

Ho una query per recuperare la differenza di data tra 2 datetime come:

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

Ex :

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

Ho bisogno di una query come questa che sottrarrà un giorno dal giorno creato:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())

1
Perché non aggiungere solo 1 al risultato?
Damien_The_Unbeliever

Se sottraendo 1 dal risultato si ottiene la risposta desiderata, la domanda che hai posto sembra sbagliata, poiché la sottrazione dal risultato equivale ad aggiungere un numero di giorni alla prima delle date.
Damien_The_Unbeliever

Quindi l'espressione che hai postato come prima risposta è quella che userei - potresti postarla come risposta, ma come ho detto, significa che la tua domanda non è proprio corretta (il periodo DATEDIFFtra 2003-03-12e oggi è 14 , non 12).
Damien_The_Unbeliever

Sì .. hai ragione .. funziona in modo opposto con i risultati ..
James

Risposte:


124

Prova questo

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

O

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())

3
Seguendo la risposta di Philip Rego, puoi usare SELECT GETDATE () - 1 per sottrarre giorni da una data.
José Barbosa

44

Non sono sicuro di cosa stai cercando di fare, ma penso che questa funzione SQL ti aiuterà:

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

Quanto sopra ti darà 2013-03-31 16:25:00.250.

Ti riporta indietro di un giorno esatto e funziona con qualsiasi formato data-ora o data standard.

Prova a eseguire questo comando e vedi se ti dà quello che stai cercando:

SELECT DATEADD(day,-1,@CreatedDate)

33

Per sottrarre semplicemente un giorno dalla data odierna:

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

(post originale utilizzato -7 ed era errato)


24

Apparentemente puoi sottrarre il numero di giorni che desideri da un datetime.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403

6

Questo dovrebbe funzionare.

select DATEADD(day, -1, convert(date, GETDATE()))

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

1

Prova questo, che questo ti possa aiutare

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

1

Ad essere onesto, uso solo:

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

che dà YYYYMMDDe meno uno da esso.

O più correttamente

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

per la data di ieri.

Sostituisci Getdate()con il tuo valoreOrderDate

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

dovrebbe farlo.


-1

Puoi provare questo.

Timestamp = 2008-11-11 13: 23: 44.657;

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

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

Spero che ti aiuti a risolvere il tuo problema.


2
Server SQL. Non supporta INTERVALo DATE_SUB.
Damien_The_Unbeliever

SELECT DATEADD (day, 45, OrderDate) FROM Orders. Avete capito bene?
chintan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.