programing

SQL Server를 사용하여 날짜 비교

mailnote 2023. 5. 6. 15:18
반응형

SQL Server를 사용하여 날짜 비교

다음 두 가지 날짜(날짜 시간)가 있습니다.

날짜 1 = 2010-12-31 15:13:48.593
날짜 2 = 2010-12-3100:00:00.000

같은 날, 그냥 다른 시간.<=>를 사용하여 date1과 date2를 비교하는 것은 date1 시간 때문에 작동하지 않습니다.따라서 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

다음 날짜 부분과 함께 함수 사용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" 이외의 다른 옵션을 사용하여 다양한 옵션을 시도할 수 있습니다.

두 날짜를 비교할 때 항상 DateDiff(day, date1, date2)를 사용합니다.

다음 예를 확인합니다.그것을 복사해서 Msql server에서 실행하면 됩니다.또한 31일부터 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

사용:

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

SQL에서 다음 스크립트를 사용하고 있으며 잘 작동하고 있습니다.

SELECT
    ID ,
    CASE
        WHEN DATEDIFF(day, ExpectedDate, ActualDate) < 0
        THEN 'Late'
        ELSE 'OnTime'
    END shipmentStatus
FROM orders
ORDER BY ExpectedDate

언급URL : https://stackoverflow.com/questions/4794028/compare-dates-using-sql-server

반응형