Bonjour,
Si la colonne de type datetime est indexée alors spécifier dans la requête une date sous la forme d'une chaine de caractères entraîne une conversion implicite qui empêche l'utilisation de l'index, et donc des performances pauvres.
Dans votre cas vous allez donc être obligé de déclarer deux variables et de les affecter comme suit :
1 2 3 4 5
| DECLARE @dateDebut datetime
, @dateFin datetime
SELECT @dateDebut = CAST(CONVERT(CHAR(8), GETDATE(), 112) AS datetime)
, @dateFin = @dateDebut + 1 |
Vous pouvez ensuite utiliser le prédicat BETWEEN :
WHERE DateTime BETWEEN @dateDebut AND @dateFin
Pour affecter @dateDebut, vous pouvez aussi utiliser :
1 2
| SELECT @dateDebut = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS datetime)
, @dateFin = @dateDebut + 1 |
Dans les deux cas vous pouvez remplacer GETDATE() par une variable de type datetime.
Enfin, si vous êtes sous SQL Server 2008, vous pouvez écrire :
1 2 3
| DECLARE @maDate date = '20100406'
DECLARE @dateDebut datetime = @maDate
DECLARE @dateFin datetime = @dateDebut + 1 |
Et réutiliser par la suite le prédicat BETWEEN 
@++
Partager