访问日期比较错误

Access Date Comparison Error

我正在编写一个 sql 语句,其中我试图获取所有小于或等于开发日期的项目。但是,我收到一个错误

"Data type mismatch in criteria expression"

我找了又找,还是一无所获。

原始结果类似于:

| Title | devTerm | pilotTerm |
+-------+---------+-----------+
| Ex1   | 201401  | 201404    |
| Ex2   | 201301  | 201401    |
| Ex3   | 201504  | 201601    |

这是我的查询:

SELECT *
FROM projects
WHERE Len(devTerm)>0
AND Len(pilotTerm)>0
AND Date() >= CDate(DateSerial(Left(devTerm,4),Right(devTerm,2),1))

我做错了什么?

p.s。如果没有必要,我不会使用 Access。

我引用了这篇文章:Convert Text to date

截图:

到目前为止,我能够重现此问题的唯一方法是快速测试函数以查看它的可能性。由此我觉得必须有一条记录是空白或无效的,重新创建它的函数如下:

Public Function Test()

    If Date >= DateSerial(Left("201401", 4), Right("201401", 2), 1) Then
        MsgBox DateSerial(Left("", 4), Right("", 2), 1)
    End If

End Function

它进入 if 语句,然后因类型不匹配而中断。因此,空白记录可能会导致此记录或无效记录。

好的,我明白了。从我的问题下的评论中,我能够想到 Nz() 函数。最终查询看起来像

SELECT *
FROM projects
WHERE Date() >= DateSerial(Left(Nz(devTerm, "1990"),4),Right(Nz(devTerm, "01"),2), 1)
AND Date() < DateSerial(Left(Nz(pilotTerm, "1990"),4),Right(Nz(pilotTerm, "01"),2), 1)

pilotTerm 和 devTerm 抛出 NULL,这就是问题所在。我以为 Access SQL 会用

过滤掉它们
Len(devTerm)>0
AND Len(pilotTerm)>0

嗯,这显然是 Left()Right() 未能 return 正确值的问题,因为 Null 值。你可以用这个,

SELECT 
    *
FROM
    projects
WHERE 
    DateSerial(Left(Nz([devTerm], 205812), 4), Right(Nz([devTerm], 205812), 2), 1) <= Date()

Nz() 将考虑到它们具有 Null 值这一事实,并在未来创建一个总是比 Date() 更大的日期