web-dev-qa-db-fra.com

MS SQL comparer les dates?

J'ai 2 dates (dates):

date1 = 2010-12-31 15: 13: 48.59
date2 = 2010-12-31 00: 00: 00.0

C'est le même jour, mais à des moments différents. La comparaison de date1 et date2 avec <= ne fonctionne pas à cause de l'heure date1. Donc date1 <= date2 est faux, mais devrait être vrai. Puis-je les comparer en regardant simplement l'année, le mois et le jour pour qu'ils soient identiques? Son SQL Server 2008.

Merci :)

78
grady
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...

Devrait faire ce dont vous avez besoin.

Cas de test

WITH dates(date1, date2, date3, date4)
     AS (SELECT CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME),
                CAST('20101231 15:13:48.593' AS DATETIME),
                CAST('20101231 00:00:00.000' AS DATETIME))
SELECT CASE
         WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITH_CAST,
       CASE
         WHEN date3 <= date4 THEN 'Y'
         ELSE 'N'
       END AS COMPARISON_WITHOUT_CAST
FROM   dates 

Résultats

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N
80
Martin Smith

Utilisez la fonction DATEDIFF avec une datepart de day.

SELECT ...
FROM ...
WHERE DATEDIFF(day, date1, date2) >= 0

Notez que si vous voulez tester que date1 <= date2, Vous devez alors tester cette DATEDIFF(day, date1, date2) >= 0 ou vous pouvez également tester DATEDIFF(day, date2, date1) <= 0.

62
LukeH

La solution simple en une ligne est

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')=0

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')<=1

datediff(dd,'2010-12-31 15:13:48.593','2010-12-31 00:00:00.000')>=1

Vous pouvez essayer diverses options avec cet autre que "dd"

3
Sarathi B

Je suis toujours utilisé DateDiff (jour, date1, date2) pour comparer deux dates.

Commander exemple suivant. Copiez simplement cela et lancez-le dans Ms SQL server. Essayez également avec la date de modification du 31 décembre au 30 décembre et vérifiez le résultat.

BEGIN

declare @firstDate datetime
declare @secondDate datetime


declare @chkDay int

set @firstDate ='2010-12-31 15:13:48.593'
set @secondDate ='2010-12-31 00:00:00.000'

set @chkDay=Datediff(day,@firstDate ,@secondDate )

if @chkDay=0
    Begin
        Print 'Date is Same'
    end
else
    Begin
        Print 'Date is not Same'
    end
End
0
Jignesh Darji