Access の SQL には、andalso が無いため、CDateでのヌル等のエラーを回避するためには、
IIf を使用します。
IIf は、慣れると使い易い命令です。(Excelのワークシート関数では、if が iif のような構文です)
IIf (条件式,真の場合,偽の場合)
とします。
つまり、フィールド「登録日」がテキスト型であるとして、whereの中で日付として扱いたい時、Access SQL では、
select * from [tablename] where Isdate(登録日) andalso CDate(登録日) >= #2025/06/21#
のような構文が使えないため、
select * from [tablename] where IIf (Isdate(登録日) , CDate(登録日) >= #2025/06/21# , False)
のように記述します。
サブクエリを使用する方法もありますが、私は IIf を使用しています。サブクエリを使用する方法は以下です。
SELECT * FROM (
SELECT * FROM tablename WHERE IsDate(登録日) = True) AS SubQuery
WHERE CDate(登録日) >= #2025/06/21#;
使いやすい方を採用してください。
以上で、説明は終了です。
|