【问题标题】:Database query, some trouble getting values from nullable fields数据库查询,从可空字段获取值有些麻烦
【发布时间】: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() 的调用会更容易吗?

标签: sql vba ms-access


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多