首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问日期比较误差

访问日期比较误差
EN

Stack Overflow用户
提问于 2015-02-04 15:45:32
回答 3查看 314关注 0票数 0

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

“标准表达式中的数据类型不匹配”

我搜过又搜过,但什么也找不到。

原始结果看起来类似于以下内容:

代码语言:javascript
运行
复制
| Title | devTerm | pilotTerm |
+-------+---------+-----------+
| Ex1   | 201401  | 201404    |
| Ex2   | 201301  | 201401    |
| Ex3   | 201504  | 201601    |

以下是我的查询:

代码语言:javascript
运行
复制
SELECT *
FROM projects
WHERE Len(devTerm)>0
AND Len(pilotTerm)>0
AND Date() >= CDate(DateSerial(Left(devTerm,4),Right(devTerm,2),1))

我做错了什么?

附注:如果我没有必要的话我就不会使用访问权限了。

我引用本文:Convert Text to date

截图:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-04 16:23:20

好吧,我解决了这个问题。从我问题下的评论中,我能够想到Nz()函数。最后的查询如下所示

代码语言:javascript
运行
复制
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把NULLs扔出去了,这就是问题的所在。我以为Access SQL会用

代码语言:javascript
运行
复制
Len(devTerm)>0
AND Len(pilotTerm)>0
票数 0
EN

Stack Overflow用户

发布于 2015-02-04 16:14:25

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

代码语言:javascript
运行
复制
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语句,然后以类型不匹配的方式中断。因此,空白记录可能会导致此记录或无效记录。

票数 0
EN

Stack Overflow用户

发布于 2015-02-04 16:24:06

显然,这就是Left()Right()由于Null值而无法返回正确值的问题。你可以用这个,

代码语言:javascript
运行
复制
SELECT 
    *
FROM
    projects
WHERE 
    DateSerial(Left(Nz([devTerm], 205812), 4), Right(Nz([devTerm], 205812), 2), 1) <= Date()

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28325496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档