使用Access数据库的sql查询时遇到问题
问题描述:
即时通讯使用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)
答
您可以在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
答
最后一行过滤结果集中的结果,但不会阻止最后一行在这些记录上运行。当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)
答
更改行: 和FLAG_DELETE =“否” 到 和FLAG_DELETE = 0
退一步,其中一些建议适用于审查你的数据,找到值是场不会转换为日期。 – JeffO