契約日付が数値になっているテーブルを更新クエリで日付形式にし、契約期間が1年未満のデータは削除したいと思っています。

例)
(1)20110401 → 2011/04/01
Left(元データ,4)&"/"&Mid(元データ,2)&"/"&Right(元データ,2)
という式で更新クエリを作り、契約開始日、終了日とも日付形式にしました。

(2)契約期間1年以上のデータを特定する
契約開始日<="2011/03/31"で契約終了日>="2012/03/31"
というテーブル作成クエリを作りました。

しかし、契約終了日がブランクのデータがあり、そのデータも(2)に含めたいと思っています。
ただのブランクであれば、契約終了日の条件式にor Null でいいのかなと思ったのですが、
(1)で更新クエリを実行しているため、ブランクではなく「//」が入っています。
どのような式にすれば、「//」データも含むことができますか?

アクセスに詳しくなく、わかりにくい説明で申し訳ありませんが、助けてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

必ず、yyyymmdd と一桁の月と日にはゼロで埋められているのなら


あえて、yyyy/mm/dd のフォーマットにしなくとも
そのまま使えますよ。
契約開始日と契約終了日が、yyyy/mm/dd になっていて合わせる為なら
Format([元データ],"@@@@/@@/@@") とすれば Nullは空白のままです

データ型を文字列から日付型に変更する場合は
IIf(IsNull([元データ]),Null,CDate(Format([元データ],"@@@@/@@/@@")))
かな?
    • good
    • 0
この回答へのお礼

ありがとうございます。ちょっとやってみます。

お礼日時:2011/04/14 18:47

何点か気になる部分がありますが、私の勝手な憶測での回答です。


!契約開始日は必ず日付に置き換えられる数値(?)が入力されていることを前提とします

クエリの画面にて契約終了日の抽出条件に

<="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#

拙い文章ですみません。
回答となっていることを願います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。サンプルまで作って検証いただき感謝です。やってみます。

お礼日時:2011/04/14 18:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング