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())

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())

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)

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)


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

6

Cela devrait fonctionner.

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


1

Essayez ceci, que cela vous aide

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

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.


-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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.