Aide relative aux instructions SQL & # 8212; Sélectionnez les clients qui ont commandé aujourd'hui

StackOverflow https://stackoverflow.com/questions/1203826

  •  05-07-2019
  •  | 
  •  

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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top