web-dev-qa-db-fra.com

Comment obtenir la date actuelle sans la partie heure

Dans SQL Server 2005, comment obtenir la date actuelle sans la partie heure? J'utilise GETDATE() mais je voudrais qu'il ait une heure de 00: 00: 00.0

88
Piers Myers

Le le plus rapide si vous devez parcourir un jeu d'enregistrements et n'avez pas de date dans SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

Deux réponses différentes et excellentes sur StackOverflow le confirment: One , Two

Les conversions Varchar sont l'une des pires façons de le faire. Bien sûr, pour une valeur, cela n'a peut-être pas d'importance, mais c'est une bonne habitude à prendre.

Cette méthode est également déterministe, par exemple si vous souhaitez indexer une colonne calculée. Même les gens qui écrivent des livres sur SQL Server obtiennent pris au piège des conversions datetime

Cette technique est également extensible.

  • hier: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • début du mois: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • fin du mois dernier: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • début du mois prochain: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

Éditer:

Comme je l'ai mentionné au sujet du déterminisme, les méthodes varchar ne sont sûres que si vous utilisez le style 112.

D'autres réponses ici indiquent que vous n'appliqueriez jamais cela à une colonne. C'est correct, mais vous souhaiterez peut-être sélectionner 100 000 lignes ou ajouter une colonne calculée ou GROUP BY uniquement. Ensuite, vous devez utiliser cette méthode.

L'autre réponse mentionne également le style 110. Ce n'est pas sûr pour la langue ou SET DATEFORMAT et échoue avec le paramètre de langue "britannique". Voir le guide ultime des types de données datetime par Tibor Karaszi.

125
gbn

Vous devez le convertir en varchar en spécifiant un modèle de format (110 dans ce cas), puis reconvertir (ou convertir) en datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
6
mrdenny