2017-12-06 19 views
0

DATETIME 필드가 두 개 있고 OpeningDate 및 FinishingDate 테이블이 있습니다.SQL은 다른 날짜보다 18 개월 전에 모든 레코드를 반환합니다. (월말까지)

정확히 16 개월 전에 FindingDate가있는 모든 레코드를 반환하는 쿼리를 작성하려고합니다.

SELECT * FROM Sales 
WHERE FinishingDate = DATEADD(MONTH, 16, OpeningDate) 

를하지만 나에게, 나는 그것이 마지막까지 모든 레코드를 얻을 필요가 (단지 달에서 일까지) 그 날짜 사이에 속하는 모든 기록을 제공하기 위해 나타납니다

나는 시도 .

그러므로 2017-10-06 (년, 월, 일)의 OpeningDate가 있고 18 개월 후에 2019-04-06이됩니다. 여기에는 4 월 6 일까지의 기록 만 포함되며 4 월 말까지 기록을 포함시켜야합니다.

이를 달성하기 위해 어떤 쿼리를 수정할 수 있습니까?

도움이 될 것입니다.

감사합니다. 당신이 코드를 사용할 수 있습니다

+0

데이터와 함께 테이블 구조를 표시하면 좋을 것입니다. –

+0

EOMONTH를 사용하여 OpeningDate를 월말로 변환하십시오. SELECT * FROM Sales OpeningDate와 DATEADD 사이의 FinishingDate (MONTH, 16, EOMONTH (OpeningDate)) – EagerToLearn

답변

0

,

SELECT * FROM Sales 
WHERE FinishingDate between OpeningDate AND 
DATEADD(MONTH, 18, EOMONTH(OpeningDate)) 

참고 :

DATEADD(MONTH, 18, EOMONTH(OpeningDate)) 

EOMONTH

이 OpeningDate의 끝을 찾은 다음 DATEADD 해당 날짜에 18 개월 추가합니다. 해당 날짜로부터 정확히 18 일의 종료 날짜가 부여됩니다.

+0

대단히 감사합니다! – Mark

0

당신은 단순히 내 SQL 서버에 그것을 시도이

SELECT * FROM Sales 
WHERE FinishingDate = DATEADD(MONTH, 16, Convert(datetime,OpeningDate)) 

을 시도 할 수 있습니다 그것은 나와 함께 잘 작동합니다.