Meilleure approche pour supprimer la partie du temps de datetime de SQL Server

La méthode qui fournit les meilleures performances lors de la suppression de la partie heure à partir d'un champ datetime dans SQL Server?

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

ou

b) select cast(convert(char(11), getdate(), 113) as datetime)

La deuxième méthode est un peu plus d'octets de toute façon, mais qui pourrait ne pas être aussi important que la vitesse de la conversion.

Les deux semblent être de très rapide, mais il peut y avoir une différence de vitesse lorsque vous traitez avec des centaines de milliers ou plus de lignes?

Aussi, est-il possible qu'il existe de meilleures méthodes pour se débarrasser de la partie heure de datetime de SQL?

  • J'ai essayé sur un million d'enregistrements dans une de mes tables de production et je ne pouvais pas obtenir une lecture précise sur les performances de toute façon. Les deux méthodes retourné exactement la même quantité de données que.
  • la manipulation de la chaîne est mcuh plus intensif du CPU. DATEADD et DATEDIFF sont conçus pour optimiser l'utilisation de la représentation de stockage utilisé par SQL Server.
  • Sur 18,000,000 lignes c'est ce que j'ai trouvé (SQL Server 2008): la Méthode b est d'environ 24% plus lente que la méthode a. CAST(ÉTAGE(CAST(getdate() en tant QUE FLOAT)) AS DATETIME), est de 3,5% plus lente que la méthode a. Méthode semble être un gagnant en ce qui concerne les performances. Merci à tous pour les réponses grands.
  • Pourquoi diable ne pas SQL ont une fonction intégrée pour le faire quand même?!!
  • SQL 2008 nouveau type de données de DATE va gérer cela.
  • J'ai essayé de Coulée de la date à date et il est encore plus lente que la méthode b. Si vous n'avez pas besoin de stocker la partie heure puis ce type de données serait très bien fonctionner.
  • double possible de le moyen le Plus efficace dans SQL Server pour obtenir la date à partir de la date+l'heure?
  • Double de Comment faire pour supprimer la partie heure d'une valeur datetime (SQL Server)?