使用Access数据库进行SQL查询时出现问题

时间:2011-10-10 18:48:46

标签: sql ms-access

我正在使用Access作为数据库,并且我在下面的查询中遇到问题。我知道问题出在email_date字段,但我不知道如何解决它。问题是一个文本字段,我试图通过使用CDATE将其用作日期字段,并将其与导致问题的实际日期字段进行比较。我得到数据不匹配错误。在email_date字段中,如果没有,则该字段由“ - ”组成,否则为9/21/2011。非常感谢任何帮助。

 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)

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您可以在WHERE子句中添加嵌套的IIf()表达式:如果EMAIL_DATE是“ - ”,则返回False;否则返回True或False,取决于两个字段的CDate()比较。如果该表达式返回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

答案 2 :(得分:0)

更改行:     AND FLAG_DELETE ='不' 至     AND FLAG_DELETE = 0