[sql-server] MS SQL 비교 날짜?

2 개의 날짜 (datetimes)가 있습니다.

date1 = 2010-12-31 15 : 13 : 48.593
date2 = 2010-12-31 00 : 00 : 00.000

같은 날, 다른 시간입니다. date1 시간 때문에 <=를 사용하여 date1과 date2를 비교하는 것은 작동하지 않습니다. 따라서 date1 <= date2는 잘못되었지만 참이어야합니다. 연, 월, 일만보고 비교해도 똑같나요? SQL Server 2008.

감사 🙂



답변

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

필요한 것을해야합니다.

테스트 케이스

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

보고

COMPARISON_WITH_CAST   |  COMPARISON_WITHOUT_CAST
Y                         N


답변

사용 DATEDIFF의 날짜 부분과 기능을 day.

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

date1<= 를 테스트하려면이를 테스트해야합니다. 그렇지 않으면 date2테스트 DATEDIFF(day, date1, date2) >= 0할 수 DATEDIFF(day, date2, date1) <= 0있습니다.


답변

간단한 한 줄 솔루션은

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

이것으로 “dd”이외의 다양한 옵션을 시도 할 수 있습니다


답변

이 시도:

BEGIN

declare @Date1 datetime
declare @Date2 datetime

declare @chkYear int
declare @chkMonth int
declare @chkDay int
declare @chkHour int
declare @chkMinute int
declare @chkSecond int
declare @chkMiliSecond int

set @Date1='2010-12-31 15:13:48.593'
set @Date2='2010-12-31 00:00:00.000'

set @chkYear=datediff(yyyy,@Date1,@Date2)
set @chkMonth=datediff(mm,@Date1,@Date2)
set @chkDay=datediff(dd,@Date1,@Date2)
set @chkHour=datediff(hh,@Date1,@Date2)
set @chkMinute=datediff(mi,@Date1,@Date2)
set @chkSecond=datediff(ss,@Date1,@Date2)
set @chkMiliSecond=datediff(ms,@Date1,@Date2)

if @chkYear=0 AND @chkMonth=0 AND @chkDay=0 AND @chkHour=0 AND @chkMinute=0 AND @chkSecond=0 AND @chkMiliSecond=0
    Begin
        Print 'Both Date is Same'
    end
else
    Begin
        Print 'Both Date is not Same'
    end
End


답변

나는 항상 DateDiff (day, date1, date2)를 사용하여 두 날짜를 비교합니다.

다음 예제를 확인하십시오. 그것을 복사하고 MS SQL 서버에서 실행하십시오. 또한 12 월 31 일부터 12 월 30 일까지 날짜를 변경하여 결과를 확인하세요.

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


답변