2011-10-10 129 views
0

即時通訊使用Access作爲數據庫和im有問題與下面的查詢。我知道問題是與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()表達式:返回false,如果EMAIL_DATE是「 - 「;否則根據兩個字段的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爲是/否類型(而不是文本類型),則在比較中使用False。

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