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!
4 Réponses :
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.
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));
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
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)
Que fait select
CONVERT (DATETIME2 (0), getdate ())? Compte tenu de ce que vous avez écrit, c'est ce à quoi je m'attendrais à travailler ...