Le meilleur moyen est :
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
En effet, en interne, SQL Server stocke toutes les dates sous la forme de deux nombres entiers, dont le premier est le ****nombre de jours*** depuis le 1er janvier 1900. (le second est la partie heure, stockée sous la forme du nombre de secondes depuis minuit. (secondes pour SmallDateTime
s, ou millisecondes pour DateTime
s)
L'utilisation de l'expression ci-dessus est préférable car elle évite toutes les conversions, en lisant et en accédant directement à ce premier entier dans une représentation interne des dates sans avoir à effectuer de traitement... les deux zéros dans l'expression ci-dessus (qui représentent 1 janvier 1900), sont également directement utilisés sans traitement ni conversion, car ils correspondent à la représentation interne du serveur SQL de la date du 1er janvier 1900 exactement telle qu'elle est présentée (sous forme d'entier).
*REMARQUE. En fait, le nombre de limites de dates (minuits) que vous devez franchir pour passer d'une date à l'autre.