Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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
Sql 访问日期比较错误_Sql_Date_Ms Access_Ms Access 2013 - Fatal编程技术网

Sql 访问日期比较错误

Sql 访问日期比较错误,sql,date,ms-access,ms-access-2013,Sql,Date,Ms Access,Ms Access 2013,我正在编写一个sql语句,试图获取所有小于或等于开发日期的项目。然而,我得到了一个错误 条件表达式中的数据类型不匹配 我找了又找,但什么也没找到 原始结果与此类似: | Title | devTerm | pilotTerm | +-------+---------+-----------+ | Ex1 | 201401 | 201404 | | Ex2 | 201301 | 201401 | | Ex3 | 201504 | 201601 | 我的问题是:

我正在编写一个sql语句,试图获取所有小于或等于开发日期的项目。然而,我得到了一个错误

条件表达式中的数据类型不匹配

我找了又找,但什么也没找到

原始结果与此类似:

| 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、 如果没有必要,我就不会使用Access

我引用这篇文章:

截图:

到目前为止,我能够重现这个问题的唯一方法是制作一个快速测试函数,看看它可能是什么。因此,我觉得必须有一个空白或无效的记录,重新创建该记录的函数如下所示:

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语句,然后因类型不匹配而中断。因此,可能是空白记录导致了这种情况或无效记录

好的,我解决了问题。从我的问题下的评论中,我能够思考新西兰的职能。最后的查询如下所示

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)

很明显,这就是由于空值导致Left和Right无法返回Right值的问题。你可以用这个

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

新西兰将考虑到他们有空值的事实,并在未来创建一个日期,该日期将始终大于日期

您的列是什么数据类型?如果devTerm和pilotTerm不是文本,则可能抛出错误。它们都是文本shorttext@Ditto如果不是文本,他们为什么会抛出错误?在我的即时窗口中,我测试了MsgBox CDateDateSerialLeft201401,4,Right201401,2,1和MsgBox CDateDateSerialLeft201401,4,Right201401,2,1都有效。@newd不确定是否会隐式转换它们。Chase:为什么使用CDATE将DateSerial的返回转换为日期?这已经是一个约会了吗?@没错,说得好,我只是把它放在那里试一下,但我忘了在发布之前把它拔下来。
SELECT 
    *
FROM
    projects
WHERE 
    DateSerial(Left(Nz([devTerm], 205812), 4), Right(Nz([devTerm], 205812), 2), 1) <= Date()