web-dev-qa-db-fra.com

Comment sélectionner des lignes pour une date spécifique, en ignorant l'heure dans SQL Server

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!

38
DenaliHardtail

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'
49
Oded

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
8
user111995
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.

1
AlexanderMP

Quelque chose comme ça:

select 
  * 
from sales 
where salesDate >= '11/11/2010' 
  AND salesDate < (Convert(datetime, '11/11/2010') + 1)
0
John Hartsock
select 
  * 
from sales 
where 
  dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'
0
Sean