44 votes

Troncature d'une date à la seconde (suppression des millisecondes) en T-SQL

Quelle est la meilleure façon de raccourcir une date qui inclut des millisecondes pour n'avoir que la seconde ?

Par exemple 2012-01-25 17:24:05.784 à 2012-01-25 17:24:05

0 votes

Remarque : dans mon cas, j'étais vraiment intéressé par la comparaison des dates, mais en ignorant les petites différences (afin de trouver des enregistrements à correspondance floue). Il était plus logique de trouver où DATEDIFF(SECONDS...) était inférieur à 1.

61voto

Mikael Eriksson Points 77190

Cela permettra de tronquer les millisecondes.

declare @X datetime
set @X = '2012-01-25 17:24:05.784'
select convert(datetime, convert(char(19), @X, 126))

ou

select dateadd(millisecond, -datepart(millisecond, @X), @X)

CAST et CONVERT
DATEADD
DATEPART

1 votes

La deuxième solution, qui consiste à soustraire les millisecondes, est brillamment simple.

25voto

gbn Points 197263

Le site le plus rapide, également sûr pour le langage et déterministe

DATEADD(second, DATEDIFF(second, '20000101', getdate()), '20000101')

0 votes

C'est une bonne option, mais je dois ensuite reconvertir le temps (je ne sais pas comment appeler votre exemple puisqu'il ne s'agit pas de 1970 - l'heure unix) pour obtenir un horodatage lisible par l'homme.

1 votes

J'ai utilisé 2000 pour éviter le dépassement des nombres entiers. Vous pouvez utiliser 19700101 si vous voulez

0 votes

Je l'ai utilisé dans le passé quand je voulais regrouper par certains MS, disons tous les 40 MS -- j'aurais vraiment aimé que ce soit big int parfois.

13voto

user3951476 Points 135

Le moyen le plus simple est maintenant :

select convert(datetime2(0) , getdate())

1 votes

Pour ceux qui regarderont cette réponse plus tard....Vous pourriez rencontrer des problèmes ici. Par exemple : SELECT CONVERT(DATETIME2(0), '2018-07-19 11:59:59.999')

9voto

Valeriy Points 91
convert(datetime, convert(varchar, @datetime_var, 120), 120)

1 votes

Un peu plus laconique, c'est : CAST(CONVERT(VARCHAR, @date, 120) AS DATETIME)

4voto

user12017546 Points 41
declare @dt datetime2
set @dt = '2019-09-04 17:24:05.784' 
select convert(datetime2(0), @dt)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X