2012-10-11 6 views
2

주어진 두 날짜 사이에 쿠폰이 유효한지 확인하려고합니다.
나는 많은 SQL 경험이 없지만 현재 코드는 BETWEEN을 사용하여 유효성을 검사하려고 시도하고 있으며 실행중인 문제는 endDate이 자정에 만료된다는 것을 나타냅니다 (예 : 10/12/2012 00:00:00.000은 자정 12시 39 분). 10/12 자정까지 확장해야합니다.
그래서이 평가를 수행하는 가장 좋은 방법은 종료일에 23:59:59을 추가/추가하는 것이 궁금합니다.두 날짜 사이에 DATETIME의 유효성을 검사하는 방법

현재 사용 :

ca.CreateDate between co.StartDate and co.EndDate 
+1

당신의 RDBMS 무엇입니까 .. 할 것 endDate가에 .. +1을 추가하는 경우라면? – Parado

답변

5

지속적으로 변화하는 값 BETWEEN을 사용하지 마십시오.

당신이 필요로 ...

ca.CreateDate >= co.StartDate 
AND ca.CreateDate < co.EndDate 

은 그러나 당신은 또한 당신의 종료 날짜 값에 하루 추가해야합니다. 코드 (co.EndDate + 1 또는 그 유사) 또는 데이터 자체에서 확인하십시오. 예를 들어

, 당신이 원하는 경우 2012 년 1 주 동안 항상 ...

이도 단위의 다른 레벨에 적용
WHERE 
     theDateTime >= '01 Jan 2012' 
    AND theDateTime < '08 Jan 2012' 

.

-- First 12 hours of the day 
WHERE 
     theDateTime >= '01 Jan 2012 00:00' 
    AND theDateTime < '01 Jan 2012 12:00' 

-- All of Jan 
WHERE 
     theDateTime >= '01 Jan 2012' 
    AND theDateTime < '01 Feb 2012' 
+0

그 사이에 해결책 대신에 얻을 수있는 이점을 궁금해 주셔서 감사합니다. –

+1

@AndrewBrower - BETWEEN은 정수와 같은 개별 값에 가장 유용합니다. 'BETWEEN 1 and 7'은 정수를보고 있다면 의미가 있습니다. 그러나 당신은 'BETWEEN 1 AND 7.99999999999'을 수레에 쓰시겠습니까? 아니면'> = 1 AND <8'이라고 쓰시겠습니까? DateTimes는 끊임없이 변하지 만 분리되어 있지 않으므로'BETWEEN'을 사용하지 않는 것이 좋습니다. * (전체 달을 훨씬 더 간단하게 만들뿐만 아니라 다른 부수적 인 이점도 있습니다.) * – MatBailie

+0

그래, 내 진짜 질문은

-1

관련 문제