Aide relative aux instructions SQL & # 8212; Sélectionnez les clients qui ont commandé aujourd'hui
Question
Disons que j’ai une table qui stocke les identifiants de commande des clients. Tels que
| Numéro de client | ID de commande | Date de commande
Comment puis-je obtenir tous les clients qui ont commandé aujourd'hui?
OrderDate serait également un DateTime.
Quelque chose comme
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
Mais la dernière partie est ce que je ne peux pas comprendre.
La solution
Il est assez courant de ne vouloir qu'une date en dehors d'une date / heure - vous devriez pouvoir utiliser Google pour les détails de votre SGBDR (puisque vous ne le mentionnez pas). Le plus important est de rendre votre requête SARGable en transformant la date d'aujourd'hui. 1 - pas la date de la commande.
Pour MSSQL, quelque chose comme
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
fonctionnerait en prenant le nombre de jours d’aujourd’hui à partir de la date 0 ( DATEDIFF (jj, 0, GETDATE ())
) et en les rajoutant à la date 0 ( DATEADD (jj, 0 , x)
). C’est cependant spécifique à T-SQL.
1 Si vous recherchez une date arbitraire, vous devez quand même transformer les deux arguments:
SELECT DISTINCT CustomerID
FROM TableName
Where
OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
--You *do not* want midnight of the next day, as it would duplicate orders
AND OrderDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()) + 1)
Autres conseils
Dans Oracle, la déclaration ressemblerait à quelque chose comme:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server devrait être similaire
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
OU
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
J'ai essayé de voir qu'il renvoie le même numéro pour la date donnée avec une heure différente. Donc, cela devrait fonctionner quand une date est convertie en sa valeur numérique.
SELECT CAST (0 AS DATETIME)
renvoie 1/1/1900 00:00:00