2011-10-10 133 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