MS SQL 비교 날짜?


88

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.

감사 :)


어떤 버전의 SQL Server? 어떤 맥락에서이 비교를 수행하고 있습니까 (열과 비교하는 경우 문제를 해결할 수 있도록주의해야 함)?
Martin Smith

나는 "select case"에서 이것을하고있다. 날짜가 <=이면이 작업을 수행하고 그렇지 않은 경우 수행하십시오. SQL Server 2008
grady

비교가 실패하려면 날짜가 문자열로 저장되어있는 것 같습니다. 그들은 날짜로 저장 한 경우에, 나는 비교 추측
파스칼

date1 <= date2 = true? 3PM이 어떻게 12AM보다 적습니까?
4 Leave Cover는

답변:


90
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

1
DATESQL Server 2008 이전 에는 유형을 사용할 수 없었습니다.
LukeH

@Luke-네. 따라서 OP가 어떤 버전에 있는지에 대한 질문입니다.
Martin Smith

@grady-그렇습니다! 테스트 케이스를 참조하십시오. 이것은 당신이 원하는 것을 정확하게 수행합니다!
Martin Smith

68

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

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

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


이것은 작동하지만 이유를 설명 할 수 있습니까? 그저 날을 비교하는 것 아닌가요?
grady

1
@grady : 아니요 와 사이 의 일 경계 수를 계산합니다 . 즉, midnights의 수는 당신이에서 얻을 통과 것 까지date1date2date1date2
LukeH

5
+1 가장 우아한 솔루션입니다. date1 이전에 date2를 허용하는 데 필요한 경우 ABS 또는 <> 0을 고려합니다
gbn

3

간단한 한 줄 솔루션은

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"이외의 다양한 옵션을 시도 할 수 있습니다


0

이 시도:

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

0

나는 항상 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.