Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Access数据库进行sql查询时出现问题_Sql_Ms Access - Fatal编程技术网

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

使用Access数据库进行sql查询时出现问题,sql,ms-access,Sql,Ms Access,我使用Access作为数据库,我对下面的查询有问题。我知道问题出在email_date字段,但我不知道如何解决它。问题是一个文本字段,我试图使用CDATE将其用作日期字段,并将其与导致问题的实际日期字段进行比较。我得到的数据不匹配的错误。在email_date字段中,如果没有,则该字段由“-”组成,否则为2011年9月21日。任何帮助都将不胜感激 SELECT A.ICAO, A.IATA, A.AIRPORT_NAME, A.CITY, A.COUNTRY, A.REVISED_DATE

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

 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)

最后一行过滤结果集中的内容,但不阻止在这些记录上运行最后一行。当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)

您可以在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
更改行: 和标志_DELETE='No' 到
在这种情况下,我怀疑您的是/否。您是否尝试从查询中删除其他两个字段以确保它是日期?请后退一步,并应用其中一些建议来查看您的数据,以找到不转换为日期的字段的值。
AND A.FLAG_DELETE=False