Comment obtenir la date actuelle sans la partie heure

83

Dans SQL Server 2005, comment obtenir la date actuelle sans la partie heure? Je l'utilise GETDATE()mais je voudrais qu'il soit mis 00: 00: 00.0

Piers Myers
la source

Réponses:

119

Le plus rapide si vous devez parcourir un jeu d'enregistrements et que vous 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 en témoignent: Un , Deux

Les conversions Varchar sont l’un des pires moyens 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 personnes qui écrivent des livres sur SQL Server se font surprendre par 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)

Modifier:

Comme je l'ai mentionné à propos du déterminisme, les méthodes varchar ne sont sécurisées que si vous utilisez le style 112.

D'autres réponses soulignent que vous ne l'appliqueriez jamais à une colonne. Ceci est correct, mais vous pouvez sélectionner 100 000 lignes ou ajouter une colonne calculée ou GROUP BY dateonly. Ensuite, vous devez utiliser cette méthode.

L’autre réponse mentionne également le style 110. Ce n’est pas une langue ni SET SET DATEFORMAT sûr et échoue avec le réglage de la langue "britannique". Voir le guide ultime des types de données datetime de Tibor Karaszi.

gbn
la source
1
Le lien fourni est mort.
Viswanathan Iyer
6

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

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