Bien que j'aie voté pour la réponse marquée comme correcte. Je voulais aborder quelques points pour quiconque trébucherait là-dessus.
En général, si vous filtrez spécifiquement sur les valeurs de date uniquement. Microsoft recommande d'utiliser le format indépendant de la langue de ymd
ou y-m-d
.
Notez que le formulaire «2007-02-12» est considéré comme indépendant de la langue uniquement pour les types de données DATE, DATETIME2 et DATETIMEOFFSET.
Faire une comparaison de dates en utilisant l'approche susmentionnée est simple. Prenons l'exemple artificiel suivant.
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
CONVERT(char(8), OrderDate, 112) = @filterDate
Dans un monde parfait, toute manipulation de la colonne filtrée doit être évitée, car cela peut empêcher SQL Server d'utiliser efficacement les index. Cela dit, si les données que vous stockez ne concernent que la date et non l'heure, envisagez de les stocker comme DATETIME
avec minuit comme heure. Car:
Lorsque SQL Server convertit le littéral en type de colonne filtrée, il suppose minuit lorsqu'une partie de temps n'est pas indiquée. Si vous souhaitez qu'un tel filtre renvoie toutes les lignes à partir de la date spécifiée, vous devez vous assurer que vous stockez toutes les valeurs avec minuit comme heure.
Ainsi, en supposant que vous ne vous préoccupez que de la date, et stockez vos données en tant que telles. La requête ci-dessus peut être simplifiée pour:
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
OrderDate = @filterDate