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?

18
demandé sur Community 2009-02-11 22:38:08

8 réponses

Une solution est de changer getdate() pour votre nom de colonne,

select dateadd(dd, datediff(dd, 0, getdate())+0, 0)
18
répondu SQLMenace 2011-05-21 17:04:26

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)
27
répondu pieman72 2017-07-01 05:43:10

Voici une autre solution:

SELECT CAST( FLOOR( CAST( GETDATE() AS float) ) AS smalldatetime)
5
répondu richardtallent 2009-07-27 21:58:53

convert(varchar, le champ date/valeur/etc, 101)

C'est la façon la plus simple d'obtenir la date à partir d'une datetime.

1
répondu notnot 2009-02-11 19:40:28

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)
1
répondu Austin Salonen 2010-04-23 20:23:03
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
0
répondu Gordon Bell 2009-02-11 19:43:12

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.

0
répondu Allain Lalonde 2009-02-11 22:54:32

je n'ai tout simplement cast(getdate() as date)

0
répondu C_BB 2018-05-17 18:14:59