日付フィールドに基づいて選択するクエリがあります。問題は、この日付フィールドが null の場合があるため、'and not null' を使用して null をチェックするだけでは機能しないことです。
これが私が開発したものです:
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')
問題なく動作するからです。
最初は、フィールドにnull値があるためだと思ったので、Last Modified
これを思いつきました-(IIF(IsNull(WS_ALL_OBJ.[Last Modified]), DateValue('2050-12-01'), DateValue(Left(WS_ALL_OBJ.[Last Modified], 10))) < #2012-11-26#
それはnullの問題を解決するべきではありませんか?
もう 1 つの可能性は、元の文字列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.[Last Modified]) または WS_ALL_OBJ.[Last Modified] = '') で空の文字列をチェックするように変更しました。
WS_ALL_OBJ.[Last Modified] = ''
などが存在しないことを確認するためだけに、いくつかのクエリを実行することになりましWS_ALL_OBJ.[Last Modified] = ' '
た。それらはすべてゼロの結果を返しました。
以下で提案されているクエリ構造も試しましたが、役に立ちませんでした。