T-SQL pour régler une datetime à la date la plus proche?
Double Quelle est la meilleure façon de supprimer la partie temps d'une valeur datetime (SQL Server)?
j'ai une colonne qui suit quand les choses sont créées à l'aide d'un datetime, mais je voudrais générer un rapport que les groupes par jour, donc j'ai besoin d'un moyen de micropression le temps composant d'une colonne datetime.
comment je fais ça?
8 réponses
Une solution est de changer getdate()
pour votre nom de colonne,
select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
pourquoi ne pas convertir directement à date:
select convert(date, getdate())
cela tronque les jours, pas les rondes. Pour arrondir les Jours de faire ceci:
select convert(date, getdate() + 0.5)
Voici une autre solution:
SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
convert(varchar, le champ date/valeur/etc, 101)
C'est la façon la plus simple d'obtenir la date à partir d'une datetime.
Oui. Il y a de nombreux formats à choisir, donc je vais le lier à la place.
http://library.cirr.com/Microsoft/SQL-Server-v7/html/ca-co_1.htm
Si vous souhaitez remettre à zéro le temps comme votre post l'indique, vous pouvez essayer ceci:
select cast(convert(varchar, getdate(), 101) as datetime)
declare @CurrentDate datetime
set @CurrentDate = dateadd(dd, datediff(dd, 0, getdate()), 0)
--ou--
select dateadd(dd, datediff(dd, 0, MyDateColumn), 0) as DateOnly
from tblX
dans Mes recherches, je suis tombé sur la solution suivante, qui consiste à supprimer le temps hors du temps UTC seulement, mais je l'ai trouvé intéressant, donc j'ai pensé que quelqu'un d'autre le ferait aussi:
FUNCTION TrimDate(@dt AS DATETIME) RETURNS DATETIME
BEGIN
RETURN CAST(CAST((@dt - 0.500000038580247) AS INT) AS DATETIME)
END
je suppose qu'il fonctionne rapidement puisque tout ce qu'il fait est arrondi et moulage.