2
votes

Comment convertir une date avec des millisecondes en une date avec seulement 000 au lieu des millisecondes?

Mes données entrantes contiennent une date au format suivant:

2019-05-01 15: 20: 51.920

mais après avoir été chargé dans le système cible, il est converti en ce qui suit:

2019-05-01 15: 20: 51.000

Je voudrais convertir les données source et les comparer avec mon système cible car mes données cibles sont conformes aux exigences.

ie 2019-05-01 15:20 : 51.920 doit être converti en 2019-05-01 15: 20: 51.000

Je regarde les fonctions de conversion comme suit mais il ne fait que couper les ms ( en utilisant getdate (0 comme exemple):

select CONVERT(DATETIME2(3),getdate())
--2019-05-01 15:20:51.920
select CONVERT(DATETIME2(2),getdate())
--2019-05-01 15:20:51.92

Quelqu'un pourrait-il me dire comment je pourrais y parvenir? Merci!


1 commentaires

Que fait select CONVERT (DATETIME2 (0), getdate ()) ? Compte tenu de ce que vous avez écrit, c'est ce à quoi je m'attendrais à travailler ...


4 Réponses :


-1
votes

L'utilisation de la méthode DATEADD / DATEDIFF pour tronquer les dates peut fonctionner pour cela. Une autre option consiste à convertir en datetime2 (0).

SELECT DATEADD( SS, DATEDIFF(SS, '2020', aDate), '2020'),
        CAST( aDate AS datetime2(0))
FROM  (VALUES( CAST( '2019-05-01 15:20:51.920' AS datetime2(3))))x(aDate)

Notez que la première option tronquera et la seconde arrondira la valeur.


0 commentaires

0
votes

Pourquoi ne pas simplement diffuser la portion de fraction de seconde en utilisant datetime2(0)?

declare @dateValue datetime2(3) = SysDateTime();

select Convert(datetime2(3), Convert(datetime2(0), @dateValue));


0 commentaires

0
votes

Cela devrait être aussi une manière plus ou moins performante:

OriginalValue           |   ValueWithoutMilliseconds
----------------------------------------------------
2019-05-01 21:44:58.473 |   2019-05-01 21:44:58.000

L'idée derrière est de couper les millisecondes, en coupant les 4 derniers caractères d'un format de sortie fixe puis de le reconvertir en a datetime

Une sortie:

SELECT GETDATE() AS OriginalValue
, CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 121)) ValueWithoutMilliseconds


0 commentaires

0
votes

Peut-être que cela devrait donner le résultat que vous recherchez,

DECLARE  @TodayDatatime datetime
SET @TodayDatatime = DateAdd(DAY, DateDiff(DAY, 0, GetDate()), 0)
select GETDATE()
SELECT DateAdd(SECOND, DateDiff(SECOND, @TodayDatatime, GetDate()), @TodayDatatime)


0 commentaires