2011-05-10 5 views
0

나는 '계약'이라는 SQL Server 2005의 테이블이 또는 만료 된 계약 (ExpirationDate<CurrentDate).선택 계약은

+0

나는했습니다

은 아마도 당신은 계약이 통지 기간 또는 만료 여부를 나타 내기 위해 쿼리의 선택 목록을 향상시킬 수 마지막 비교가 표시되도록 코드를 표시하고 표의 내러티브를 CREATE TABLE 문으로 변환합니다.이 문은 읽기 쉽고 사람들은 자체 서버에서 실행하고 응답을 시도 할 수 있습니다. 첫 번째 조건이 명확하지 않습니다 (비교가 지정되지 않았습니다). 그리고 defn 테이블이 100 % 올바른지 보장하지 않습니다. –

답변

0

당신은 이런 식으로 그것을 달성 할 수 있습니다 :

SELECT * 
FROM Contracts 
WHERE GETDATE() > DATEADD(day,-1*daysInAdvance,expirationDate) 
OR expirationDate < GETDATE() 
+0

'코드 태그'를 사용하십시오 ... – JNK

+0

죄송합니다. 다음 번에 할 수 있습니다. –

+0

사과 할 필요가 없습니다. 단지 코드 형식을 지정하십시오 :) – JNK

2

SQL Server의 DateAdd 함수를 살펴보십시오.

그것으로, 당신은 당신의 where 절에서이 작업을 수행 할 수 있습니다

where (GetDate() > DateAdd(DAY, DaysNotificationAdvanced * -1, ExpirationDate) OR GetDate() > ExpirationDate) 

을 SQL 서버에는 DateSubtract 기능이 없기 때문에, 나는 EXPIRATIONDATE에서 빼기 -1에 의해 DaysNotificationAdvanced mulitplied.

업데이트 : JNK가 주석에서 언급했듯이 알림 기간에 계약을 반환하려는 경우에는 "OR GetDate()> ExpirationDate"절에서 두 번째 조건이 필요하지 않습니다. 또는 나중에.

SELECT ContractNo, 
     ExpirationDate, 
     DaysNotificationAdvanced 
     CASE WHEN GETDATE() > ExpirationDate THEN 'Expired' 
     ELSE 'About To Expire' END AS ContractStatus 
FROM Contracts 
WHERE GetDate() > DateAdd(DAY, DaysNotificationAdvanced * -1, ExpirationDate 
+1

논리적으로 우리는 그의 두 번째 요구 사항조차 필요하지 않습니다 - 현재 날짜가 알림 기간은 기간 내에 있거나 만료됩니다. – JNK

+0

@JNK, 정확합니다. 내 의견을 포함하도록 답변을 업데이트했습니다. –

+0

편집 할 수 있다면 +2, 사례 사용의 좋은 사용 – JNK

관련 문제