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.