2010-12-05 7 views
1

Comment vérifier si 2 dates sont égales dans un script sql?Comparer des dates dans SQL Server

La valeur passée de l'extrémité avant est « 2010-12-04 22:14:49 » et la date dans le tableau est « 2010-12-04 22: 14: 49,253 »

Je ne se soucient du millisec. J'ai essayé

DATEDIFF(SS,'2010-12-04 22:14:49','2010-12-04 22:14:49.253') = 0 

et obtenu l'erreur suivante

La fonction datediff a donné lieu à un trop-plein . Le nombre de parties de date séparant deux instances de date/heure est trop grand. Essayez d'utiliser datediff avec un moins précis.

+1

Je ne reçois pas cette erreur avec votre échantillon. –

Répondre

2

Sur mon SQL Server (2008 R2) cette extrait de code T-SQL fonctionne très bien ....

Êtes-vous sûr que vous n'introduisait pas une faute de frappe (par exemple 1010-12-04......) dans vos dates en quelque sorte , de sorte que la distance entre les deux dates serait vraiment vraiment grande?

Ensuite, le nombre de secondes entre eux pourrait bien déborder même grande plage numérique de SQL Server - et c'est exactement ce que le message d'erreur dit ...

+0

Merci il y avait une faute de frappe. Il y a une chance qu'un utilisateur essaye de rechercher des dates avec un intervalle plus long. Dans ce cas, comment puis-je empêcher cette erreur? – dotnetrocks

+0

@Dotnetrocks: peut-être que vous devriez vérifier DATEDIFF avec, par exemple, JOUR d'abord - si c'est moins d'un jour de différence, vous pouvez vérifier avec SECONDS. Ou juste attraper l'exception - si cela arrive, les dates sont évidemment un peu à part. –

2

Utilisez-vous cela dans une clause WHERE contre une colonne datetime?

Si oui il suffit d'utiliser

DECLARE @d DATETIME = '2010-12-04 22:14:49.000' 

SELECT .... 
WHERE YourCol >= @d AND YourCol < DATEADD(SECOND,1,@d) 

Ce sera plus sargable et efficace de toute façon.

+0

est-il un moyen de supprimer les secondes de la date. Ensuite, je peux faire une comparaison un sur un – dotnetrocks

+1

Probablement. Si vous appliquez une fonction à la colonne pour supprimer les secondes, vous garantissez qu'un index ne peut pas être utilisé pour satisfaire cette requête et que vous analyserez la totalité de la table.Ma requête écrite peut être satisfaite avec une recherche de distance. –

+0

@dotnetrocks Vous pouvez supprimer des millisecondes de vos paramètres avec SET @d = DATEADD (MS, -DATEPART (MS, @d), @d) –

0

Cela supprime les secondes des dates

where convert (varchar(10), @date1, 108) + ' ' + CONVERT(varchar(5), @date1, 108) = convert (varchar(10), @date2, 108) + ' ' + CONVERT(varchar(5), @date2, 108) 
0

Cast chacune des valeurs datetime comme l'exemple ci-dessous:

declare @stuff as datetime 
set @stuff = getdate() 
select @stuff 
SELECT CONVERT(VARCHAR(26), @stuff, 120) 

Sortie =

2010-12-05 16:17:49.720 

et

2010-12-05 16:17:49 

La conversion en type 120 n'inclut pas les millisecondes. Suivez ce LINK pour d'autres types de conversions.