数据库查询,从可空字段获取值有些麻烦

时间:2014-06-26 17:29:53

标签: sql vba ms-access

我正在使用一个巨大的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模块函数,它从字符串参数返回Date值(dd / MM / yyyy)。

执行查询时,我收到此消息: “这个表达式输入不正确,或者太复杂而无法评估......”

该表的大小约为50K,但我很确定这不是原因,这个数据库周围还有其他查询,复杂度高10倍,运行速度非常快!

我已尝试使用此表在Prod字段中没有空值并且工作正常,但是当我尝试使用整个表时,弹出的消息;我错过了什么?

1 个答案:

答案 0 :(得分:1)

作为最后的手段,您可以尝试使用嵌套的子查询。

SELECT SUB.ID, SUB.Name
FROM
(SELECT t.ID, t.Name, t.Prod WHERE t.Prod Is Not Null) AS SUB
WHERE GetDate(SUB.Prod) >= [@basedate]
ORDER BY SUB.ID