2014-06-26 45 views
0

我正在使用巨大的Access(.mdb)數據庫,因爲我的運氣不好,我無法更改任何表設計,只能創建查詢,以及...數據庫查詢,從可空字段獲取值時遇到一些問題

具有這種表(部分):

Table1 

Id  Autonumber 
Name  Text(50) Not Null 
Prod  Text(8) Null 

其中PROD字段是格式爲 「DDMMYYYY」 的日期,而不是必需的。

有了這樣的價值觀:

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模塊函數返回一個日期:

Id Name Prod 
------------------------ 
1 KX_W 06061988 
2 AXR (null) 
3 ELR 03021957 

然後我想這個查詢,以根據最新獲得的記錄值(日/月/年)來自字符串參數。

當執行查詢時,我得到這個消息: 「這種表達是輸入錯誤,或者是太複雜,無法評估......」

表約50K,記錄大小,但我很確定這不是原因,這個數據庫還有其他疑問,10倍更復雜,運行速度非常快!

我試過一塊這個表在Prod字段上沒有空值並且工作正常,但是當我嘗試使用整個表時,消息彈出;我錯過了什麼?

+0

您是否使用此GetDate()函數運行其他查詢,如果是,它們是否正常工作? –

+0

@OverMind確定有很多查詢使用它,但是這是**只有一個**向它發送空值,即使使用'((Table1.Prod)不是空)'條件。 – Shin

+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