web-dev-qa-db-fra.com

Enregistrements SQL Select basés sur la date actuelle moins deux jours

J'ai un tableau de commandes qui contient un ID de commande, une date de commande et une description de commande.

Je souhaite exécuter une requête de sélection qui capture toutes les commandes qui ont été créées au cours des deux derniers jours. donc la date actuelle moins deux jours. à partir du 14 décembre, je souhaite sélectionner toutes les commandes dont la date de commande est> 13 décembre. Cela doit utiliser une fonction Obtenir la date pour récupérer la date actuelle et moins les jours.

J'ai essayé:

select * from orders where orderdate > getdate() - 2 

mais cela ne produit pas les bons résultats. Une idée est de savoir comment faire ça s'il vous plaît?

4
Emma

vous devriez essayer d'utiliser la fonction dateadd

select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))

Maintenant, cela peut être exactement ce dont vous avez besoin, mais vous devez comprendre qu'en moulant à ce jour, nous supprimons la partie temporelle et revenons effectivement au début de la journée et un jour derrière (-1) donne le début d'hier.

10
DhruvJoshi

Si vous voulez les commandes des deux derniers jours, utilisez DATEADD pour ajouter des jours à la date du jour (dans votre cas -2 jours) puis utilisez DATEDIFF pour comparer les deux jours:

SELECT * FROM orders
WHERE DATEDIFF(DAY, DATEADD(DAY, -2, GETDATE()), orderdate) > 0

Maintenant, en supposant que toutes les commandes ont des dates dans le passé et aucune dans le futur (ce qui devrait être le cas), vous pouvez simplement utiliser DATEDIFF comme ceci:

SELECT * FROM orders
WHERE DATEDIFF(DAY, orderdate, GETDATE()) <= 2

Remarque: vous pouvez utiliser < 3 au lieu de <= 2.

2
Racil Hilan

Essaye ça:

select * from orders where orderdate > cast(getdate() - 1 as date)
1
Niranjan Rajawat

On dirait que dateadd et convert résoudront le problème.

select   o.*
from     orders o
where    o.orderdate >= dateadd(day, -2, convert(date, getdate()))
1
StelioK