Avec une table avec une colonne datetime, comment interroger les lignes dont la date correspond à la valeur spécifiée mais ignore la partie heure?
Par exemple, select * from sales where salesDate = '11/11/2010'
Pour cette requête, nous ne nous soucions pas du temps. D'autres requêtes nécessitent le composant heure, nous ne pouvons donc pas stocker uniquement le composant date.
Merci!
Vous pouvez supprimer la composante temps lorsque vous comparez:
SELECT *
FROM sales
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'
Une autre approche consiste à changer la sélection pour couvrir tout le temps entre le début et la fin de la date:
SELECT *
FROM sales
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'
Je sais que cette question a pris du temps, mais je cherchais simplement la même réponse et j'ai trouvé que cela semblait être la solution la plus simple:
select * from sales where datediff(dd, salesDate, '20101111') = 0
En fait, je l'utilise davantage pour trouver des informations dans les deux derniers jours. Ma version ressemble donc à ceci:
select * from sales where datediff(dd, salesDate, getdate()) = 0
Et en changeant le 0 pour aujourd'hui en 1, je reçois les transactions d'hier, 2 le jour précédent, et ainsi de suite. Et si vous voulez tout pour la semaine dernière, il suffit de changer les égaux en moins ou égaux à:
select * from sales where datediff(dd, salesDate, getdate()) <= 7
select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy
La façon la plus correcte de le faire:
DECLARE @myDate datetime
SET @myDate = '11/11/2010'
select * from sales where salesDate>=@myDate and salesDate<dateadd(dd,1,@myDate)
Si seule la date est spécifiée, cela signifie minuit total. Si vous voulez vous assurer que les intervalles ne se chevauchent pas, basculez entre une paire de >=
et <
vous pouvez le faire en une seule déclaration, mais c'est simplement que la valeur est utilisée deux fois.
Quelque chose comme ça:
select
*
from sales
where salesDate >= '11/11/2010'
AND salesDate < (Convert(datetime, '11/11/2010') + 1)
select
*
from sales
where
dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'