- 締切済み
アクセスのクエリについて教えてください
契約日付が数値になっているテーブルを更新クエリで日付形式にし、契約期間が1年未満のデータは削除したいと思っています。 例) (1)20110401 → 2011/04/01 Left(元データ,4)&"/"&Mid(元データ,2)&"/"&Right(元データ,2) という式で更新クエリを作り、契約開始日、終了日とも日付形式にしました。 (2)契約期間1年以上のデータを特定する 契約開始日<="2011/03/31"で契約終了日>="2012/03/31" というテーブル作成クエリを作りました。 しかし、契約終了日がブランクのデータがあり、そのデータも(2)に含めたいと思っています。 ただのブランクであれば、契約終了日の条件式にor Null でいいのかなと思ったのですが、 (1)で更新クエリを実行しているため、ブランクではなく「//」が入っています。 どのような式にすれば、「//」データも含むことができますか? アクセスに詳しくなく、わかりにくい説明で申し訳ありませんが、助けてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nicotinism
- ベストアンサー率70% (1019/1452)
必ず、yyyymmdd と一桁の月と日にはゼロで埋められているのなら あえて、yyyy/mm/dd のフォーマットにしなくとも そのまま使えますよ。 契約開始日と契約終了日が、yyyy/mm/dd になっていて合わせる為なら Format([元データ],"@@@@/@@/@@") とすれば Nullは空白のままです データ型を文字列から日付型に変更する場合は IIf(IsNull([元データ]),Null,CDate(Format([元データ],"@@@@/@@/@@"))) かな?
- a_ka_
- ベストアンサー率16% (1/6)
何点か気になる部分がありますが、私の勝手な憶測での回答です。 !契約開始日は必ず日付に置き換えられる数値(?)が入力されていることを前提とします クエリの画面にて契約終了日の抽出条件に <="2012/03/31" or "//" を記載すれば抽出できるかと思います。 但し、型の設定を行っていないため正確な抽出結果として扱えるか?は疑問が残ります。 一応、サンプルにて検証して正常な結果は戻ってきました。 データを抽出する場合は正確に抽出することを前提としているので 私がクエリやSQLを作成する場合、条件に当てはめるカラムのデータは 全てそれぞれに見合った型に直してから実行しています。 今回の場合は開始日、終了日とも下記のように日付型に直します。 NULLのデータに関しては分かりやすい日付(絶対使われていないであろう日付)に置き換えます。 ブランクと記載がありますが今回は全てNULLが入っていると仮定しています。 もし、NULLと空文字列等が混じっている場合、iif文が増えていきます。 例えばのフィールド設定↓ cdate(left([契約開始日],4)&"/"&mid([契約開始日]5,2)&"/"&right([契約開始日],2)) cdate(iif(nz([契約終了日],"9999/01/01")="9999/01/01","9999/01/01",left([契約終了日],4)&"/"&mid([契約終了日]5,2)&"/"&right([契約終了日],2))) 契約開始日の抽出条件 <=#2011/03/01# 契約終了日の抽出条件 >=#2012/03/31# or #9999/01/01# 拙い文章ですみません。 回答となっていることを願います。
お礼
回答ありがとうございます。サンプルまで作って検証いただき感謝です。やってみます。
お礼
ありがとうございます。ちょっとやってみます。