Dans SQL Server 2005, comment obtenir la date actuelle sans la partie heure? Jutilise GETDATE()
mais jaimerais que lheure soit 00: 00: 00.0
Réponse
Le le plus rapide si vous devez parcourir un jeu denregistrements sans avoir 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 , Deux
Les conversions Varchar sont lun des pires moyens de le faire. Bien sûr, pour une valeur, cela na peut-être pas dimportance, mais cest « une bonne habitude à prendre.
Cette méthode est également déterministe , disons si vous souhaitez indexer une colonne calculée. Même les gens qui écrivent des livres sur SQL Server sont surpris par les 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 dernier mois:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
- début du mois prochain:
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Modifier :
Comme je lai mentionné à propos du déterminisme, les méthodes varchar ne sont sûres que si vous utilisez le style 112.
Dautres réponses indiquent que vous ne lappliquerez jamais à une colonne. correct, mais vous voudrez peut-être sélectionner 100 000 lignes ou ajouter une colonne calculée ou une date GROUP BY uniquement. Ensuite, vous devez utiliser cette méthode.
Lautre réponse mentionne également le style 110. Ce nest pas un langage ou SET DATEFORMAT est sûr et échoue avec le paramètre de langue « britannique ». Consultez le guide ultime des types de données datetime par Tibor Karaszi.
Commentaires
- Fourni lin k est mort.
Réponse
Vous devez le convertir en varchar en spécifiant un modèle de format (110 dans ce case) puis convertissez (ou transtypez) en date / heure.
select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)