2011-10-10 2 views
0

메신저를 데이터베이스로 사용하고 아래의 쿼리에 문제가 있습니다. 나는 문제가 email_date 필드에 있다는 것을 알고 있지만 그것을 고치는 방법을 모른다. 문제는 CDATE를 사용하여 날짜 필드로 사용하려고하는 텍스트 필드이며 문제를 일으키는 실제 날짜 필드와 비교하는 것입니다. 데이터 불일치 오류가 발생했습니다. email_date 필드에 아무것도없는 경우 필드는 '-'로 구성되고 그렇지 않으면 2011 년 9 월 21 일입니다. 어떤 도움이라도 대단히 감사 할 것입니다.Access 데이터베이스를 사용하는 SQL 쿼리에 문제가 있습니다.

SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, 
A.REVISED_DATE, A.COMPANY, A.EMAIL_DATE 
FROM AIRPORT_CHECKLIST A 
WHERE A.COMPANY = 'company' 
AND FLAG_DELETE = 'No' 
AND EMAIL_DATE <> '--' 
AND CDATE(REVISED_DATE) > CDATE(EMAIL_DATE) 
+0

하는 단계를 다시 가지고있는 필드의 값을 찾기 위해 데이터를 검토 이러한 제안의 일부를 적용 날짜로 변환하지 않을 것입니다. – JeffO

답변

0

당신은 WHERE 절에 중첩하여 IIf() 식을 추가 할 수 있습니다 :이 문제를 방지하기 위해

한 가지 방법은 먼저 빈 날짜를 필터링 하위 쿼리를 사용하는 것입니다 EMAIL_DATE "인 경우 False를 반환 - "; 그렇지 않으면 두 필드의 CDate() 비교에 따라 True 또는 False를 반환합니다. 해당식이 True를 반환 할 경우 행만 결과 집합에 포함됩니다.

SELECT 
    A.ICAO, 
    A.IATA, 
    A.AIRPORT_NAME, 
    A.CITY, 
    A.REVISED_DATE, 
    A.COMPANY, 
    A.EMAIL_DATE 
FROM 
    AIRPORT_CHECKLIST AS A 
WHERE 
     A.COMPANY='company' 
    AND IIf(EMAIL_DATE='--',False, 
      IIf(CDATE(REVISED_DATE) > CDATE(EMAIL_DATE),True,False)) 
    AND A.FLAG_DELETE='No'; 

는 모두 "날짜"필드는 텍스트 유형이 있다면 또한, 'YYYY-MM-DD'형식으로 날짜 값을 저장할 수 단순히 어떤 데이터 유형 불일치 문제 텍스트 값을 비교한다.

A.EMAIL_DATE <> '--' AND A.REVISED_DATE > A.EMAIL_DATE 

편집 : FLAG_DELETE은 (대신 텍스트 형식의) 예/아니오 유형이없는 경우에 비해 리터럴 거짓을 사용합니다.

AND A.FLAG_DELETE=False 
0

마지막 줄은 결과 집합에서 끝나는 내용을 필터링하지만 마지막 줄이 해당 레코드에서 실행되는 것을 막지는 않습니다. EMAIL_DATE = '-'이면 마지막 행에서 유형 불일치가 발생합니다.

SELECT * FROM 
(SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, 
A.REVISED_DATE, A.COMPANY, A.EMAIL_DATE 
FROM SELECTAIRPORT_CHECKLIST A 
WHERE A.COMPANY = 'company' 
AND FLAG_DELETE = 'No' 
AND EMAIL_DATE <> '--') 
WHERE CDATE(REVISED_DATE) > CDATE(EMAIL_DATE) 
+0

나는 이것을 시도했지만 여전히 데이터 불일치 오류가 발생했습니다. – Will

+0

이 경우 귀하의 예/아니오를 의심합니다. 쿼리에서 다른 두 필드를 제거하여 날짜가 맞는지 확인해 보셨습니까? – Anderson

0

변경 라인 : 및 FLAG_DELETE = '없음' 에 및 FLAG_DELETE = 0

관련 문제