我有一個查詢,它的選擇基於日期字段。問題是這個日期字段有時是空的,所以僅僅使用'and not null'檢查null是行不通的。DateValue函數的標準表達式中的數據類型不匹配
這是我開發:
SELECT DISTINCT WS_ALL_OBJ.[Owner ID], Users.CHARGE_UNIT, WS_ALL_OBJ.[Owner Name]
FROM WS_ALL_OBJ LEFT JOIN Users ON WS_ALL_OBJ.[Owner ID] = Users.CNAME
WHERE
(IIF(IsNull(WS_ALL_OBJ.[Last Modified]), DateValue('2050-12-01'), DateValue(Left(WS_ALL_OBJ.[Last Modified], 10))) < #2012-11-26#
And
(Users.CHARGE_UNIT <> 'CQ'))
GROUP BY WS_ALL_OBJ.[Owner ID], Users.CHARGE_UNIT, WS_ALL_OBJ.[Owner Name];
當運行這個查詢,它拋出一個「在正則表達式數據類型不匹配」的錯誤消息。
我已經縮小到這行代碼 - DateValue(Left(WS_ALL_OBJ.[Last Modified], 10))
,因爲如果我用這個代替 - DateValue('2011-11-26')
- 它工作得很好。
起初我還以爲是因爲有我Last Modified
場這就是爲什麼我想出了這個空值 - (IIF(IsNull(WS_ALL_OBJ.[Last Modified]), DateValue('2050-12-01'), DateValue(Left(WS_ALL_OBJ.[Last Modified], 10))) < #2012-11-26#
難道不應該解決的空值的問題?
另一種可能性是來自Left()
的字符串格式不正確。我認爲這是因爲這個 - DateValue('2011-11026')
- (錯誤的格式)也會通過數據類型不匹配例外。
然而,這是所有的數據是什麼樣子:
2008-01-18 13:10:54 CST
它存儲爲「文本」字段和來自鏈接的csv文件。功能Left()
功能應採取前10個字符,並通過DateValue()
我很茫然,感謝任何幫助。
更新:我也試過cdate(Left(WS_ALL_OBJ.[Last Modified], 10))
並得到相同的錯誤。 我也修改用來檢查`空字符串(ISNULL(WS_ALL_OBJ。[上次修改])或WS_ALL_OBJ。[上次修改] =「」)
我結束了在運行一些查詢只是爲了確保沒有WS_ALL_OBJ.[Last Modified] = ''
或者存在WS_ALL_OBJ.[Last Modified] = ' '
等。他們都返回了零結果。
我也嘗試了下面的建議查詢結構,但無濟於事。
Last Modified的數據類型是什麼?如果它是一個字符串,它可以包含一個零長度的字符串。 – Tim 2013-02-26 15:38:59
@Tim鍵入'Text' – hacket 2013-02-26 15:40:32
也檢查零長度的字符串。 – Tim 2013-02-26 15:42:20