Soustraire un jour de datetime

102

J'ai une requête pour récupérer la date diff entre 2 datetime comme:

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

Ex :

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

Je dois faire fonctionner une requête comme celle-ci, qui soustrayera un jour du jour créé:

SELECT DATEDIFF(DAY, **@CreatedDate- 1** , GETDATE())
James
la source
1
Pourquoi ne pas simplement ajouter 1 au résultat?
Damien_The_Unbeliever
Si soustraire 1 du résultat donne la réponse souhaitée, alors la question que vous avez posée semble erronée, car soustraire du résultat équivaut à ajouter un nombre de jours à la première des dates.
Damien_The_Unbeliever
Ensuite, l'expression que vous avez postée comme première réponse à moi est celle que j'utiliserais - vous pourriez la poster comme réponse, mais comme je l'ai dit, cela signifie que votre question n'est pas vraiment correcte (l' DATEDIFFintervalle entre 2003-03-12et aujourd'hui est 14 , pas 12).
Damien_The_Unbeliever
Oui .. vous avez raison .. cela fonctionne comme le contraire avec les résultats ..
James

Réponses:

124

Essaye ça

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

OU

SELECT DATEDIFF(DAY,  DATEADD(day, -1, @CreatedDate), GETDATE())
yogi
la source
3
Suite à la réponse de Philip Rego, vous pouvez utiliser SELECT GETDATE () - 1 pour soustraire des jours à une date.
José Barbosa
44

Je ne sais pas exactement ce que vous essayez de faire, mais je pense que cette fonction SQL vous aidera:

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

Ce qui précède vous donnera 2013-03-31 16:25:00.250 .

Il vous ramène exactement un jour et fonctionne sur n'importe quel format de date / heure standard.

Essayez d'exécuter cette commande et voyez si elle vous donne ce que vous recherchez:

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

Pour soustraire simplement un jour de la date d'aujourd'hui:

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

(le message d'origine utilisé -7 et était incorrect)

FoxDeploy
la source
24

Apparemment, vous pouvez soustraire le nombre de jours que vous voulez d'une date / heure.

SELECT GETDATE() - 1

2016-12-25 15:24:50.403
Philip Rego
la source
6

Cela devrait fonctionner.

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

Essayez ceci, que cela vous aide

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

Pour être honnête, j'utilise simplement:

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

ce qui en donne YYYYMMDDet moins un.

Ou plus correctement

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

pour la date d'hier.

Remplacez Getdate()par votre valeurOrderDate

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

devrait le faire.

meekon5
la source
-1

Vous pouvez essayer ceci.

Horodatage = 2008-11-11 13: 23: 44,657;

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

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

J'espère que cela aidera à résoudre votre problème.

chintan
la source
2
Serveur SQL. Ne prend pas en charge INTERVALou DATE_SUB.
Damien_The_Unbeliever
SÉLECTIONNEZ LA DATEADD (jour, 45, OrderDate) FROM Orders. Tu l'as eu?
chintan