【发布时间】:2014-06-26 17:29:52
【问题描述】:
我正在使用一个巨大的 Access (.mdb) 数据库,不幸的是我无法更改任何表设计,只能创建查询,嗯...
拥有这张表(部分):
Table1
Id Autonumber
Name Text(50) Not Null
Prod Text(8) Null
其中 Prod 字段是格式为“ddMMyyyy”的日期,不是必需的。
使用这样的值:
Id Name Prod
------------------------
1 KX_W 06061988
2 AXR (null)
3 ELR 03021957
然后我正在尝试这个查询,根据日期获取记录:
PARAMETERS [@basedate] Date;
SELECT
Table1.Id,
Table1.Name
FROM
Table1
WHERE
((Table1.Prod) Is Not Null) AND
(GetDate(Table1.Prod) >= [@basedate])
ORDER BY
Table1.Id;
*GetDate() 是一个 VBA 模块函数,它从字符串参数返回一个日期值 (dd/MM/yyyy)。
执行查询时,我收到以下消息: "此表达式输入错误或太复杂无法计算..."
该表大约有 50K 条记录大小,但我很确定这不是原因,这个数据库周围还有其他查询,比它复杂 10 倍而且运行速度非常快!
我已尝试使用该表的一部分在 Prod 字段上没有空值并且工作正常,但是当我尝试使用整个表时,会弹出消息;我错过了什么?
【问题讨论】:
-
您是否使用此
GetDate()函数运行其他查询,如果是,它们是否正常运行? -
@OverMind 确定有很多查询使用它,但这是唯一一个向它发送空值的查询,即使使用
((Table1.Prod) Is Not Null)条件也是如此。 -
你试过我的解决方案了吗?
-
将@basedate 值格式化为 ddMMyyyy 并将其与 table1.prod & "" (将空值转换为空白)进行比较并完全跳过对 getdate() 的调用会更容易吗?