Strictement, la méthode a
est le moins gourmand en ressources :
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Moins gourmand en CPU pour la même durée totale d'un million de lignes par quelqu'un qui a beaucoup trop de temps libre :le moyen le plus efficace dans SQL Server pour obtenir une date à partir de date+heure ?
J'ai vu un test similaire ailleurs avec des résultats similaires.
Je préfère le DATEADD/DATEDIFF car :
- varchar est sujet à des problèmes de langage/format de date
Exemple :pourquoi mon expression CASE est-elle non déterministe ? - float s'appuie sur le stockage interne
- il s'étend pour calculer le premier jour du mois, demain, etc. en changeant la base "0"
Modifier, octobre 2011
Pour SQL Server 2008+, vous pouvez CAST à date
c'est-à-dire CAST(getdate() AS date)
. Ou utilisez simplement date
type de données donc pas de time
à supprimer.
Modifier, janvier 2012
Un exemple pratique de la flexibilité :besoin de calculer en fonction de l'heure ou de la date arrondie dans le serveur SQL
Modifier, mai 2012
Ne l'utilisez pas dans les clauses WHERE et autres sans y penser :l'ajout d'une fonction ou d'un CAST à une colonne invalide l'utilisation de l'index. Voir le numéro 2 ici Erreurs courantes de programmation SQL
Maintenant, cela a un exemple de versions ultérieures de l'optimiseur SQL Server gérant correctement CAST à ce jour, mais généralement ce sera une mauvaise idée...
Modifier, septembre 2018, pour datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)