• ベストアンサー
  • 困ってます

ACCESSのDate関数について

会社のDBにACCESSで繋いで必要な資料を作成しています。そのDBの日付の書式がyyyymmddの型になっていて、クエリの抽出条件でdate()と入力しても上手くいきません。そのために、left(date,4)&"/"&mid(date,5,2)&"/"&right(date,2)としてyyyy/mm/ddの型に直して抽出しています。このやり方だとクエリの実行にとても時間がかかります。yyyymmddのままでパラメータを指定して20070630と入力すると10秒かからずに表示されますが、yyyy/mm/ddの型に直してdate()にすると3分近くかかります。yyyymmddのままでdate()を使う方法はありますか?

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数9324
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • bonaron
  • ベストアンサー率64% (482/745)

クエリの抽出条件の方を =Format(Date(),"yyyymmdd") としたら、いかがですか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼が遅くなってすいません。とても早くなりました。私自身の教えてgooの中でも1,2を争うベスト回答です!とても助かります。有難うございました。

その他の回答 (1)

  • 回答No.1

> パラメータを指定して20070630と入力すると10秒かからずに表示されます もしかしたら、その日付のデータ型が、日付型ではなくテキスト型になっている のではないでしょうか。 クエリの抽出条件を、以下の式にしてみて下さい; CStr(Date()) もしくは Replace(CStr(Date()),"/","") 多分、保存されたデータ内に「/」は含まれていない(表示時に「書式」の設定で 追加されている)ものと思いますので、後者の方がクエリの実行速度は速いの ではないかと思います。 (但し、今回Access2003で確認して問題なかったものの、以前97か2000で試した  際には、クエリでReplace関数のはエラーになったような気もするのが・・・(汗))

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼が遅くなってすいません。おっしゃるとおりテキスト型です。以前のDBでは日付型になっていて、今回なぜテキスト型にしたのか明確な説明は無かったのですが今さら変更するのもややこしそうなのでこのまま使うしかありません。CStr(Date())に変えて少し早くなりました。データ量もかなり多いのでこのまま使おうと思います。ACCESS2000ではReplaceは未定義関数といわれましたので使えませんでした。 どうも有難うございました。

関連するQ&A

  • Accessで日付を抽出するパラメータを設定したい

    Accessのクエリで日付に対して与えているパラメータがあります。 パラメータで指定したいデータはフォームのテキストに入力した日の23:59:59 以降の日付を抽出したい。 入力:数値8桁(yyyymmdd)で行う 抽出先テーブルのデータ:yyyy/mm/dd hh:mm:ss 現在以下のパラメータを日付に対して与えると「式が複雑すぎます、、、」と注意されてしまいます。 指定日の23:59:59を抽出範囲として指定するのはどうしたらよいでしょうか? 入力値の変換も含めて、以下のパラメータを入れています。 「+"23:59:59"」をとればエラーは出ません。 <=IIF(Len([Forms]![フォーム名]![日付])=8,CDate(Format([Forms]![フォーム名]![日付],"@@@@/@@/@@")),#9999/1/01#)+"23:59:59" どなたか、お助け下さい。よろしくお願い致します。

  • 【PL/SQL】DATE型の時刻の表示と非表示

    PL/SQLでのDATE型の取扱いについて教えてください。 初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、 ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、 dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS'); としてINSERTにdtWorkEndDateを用いると、 YY-MM-DD形式でDBに登録されてしまいます。 (dtWorkEndDateはDATE型。) ORACLEの設定かPL/SQLの問題なのかわからないのですが、 なにかアドバイスを頂けないでしょうか。 よろしくお願いします。

  • Accessクエリで100年単位で抽出したい

    いつも、お世話になります。 Win7, Access2013 パラメータクエリで行き詰まっています。ご存知の方がいらっしゃいましたら、ご教示お願いします。 年月日のコントロールがあり、yyyy/mm/dd の書式から 1900年代を抽出したいのです。 月だけを抽出したい場合、webの事例で フィールド:Format([年月日],"mm") にして、パラメータクエリで 05 と入力すると 5月のリストが抽出できるようになりました。 パラメータクエリで、この年月日に「1900」又は 「19」と入力すると 1900年代のリストが抽出できるようしたいのです。 ご存知の方がいらっしゃいましたら、ぜひお願いいたします。

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • Access2007で同月同日を抽出

    ある(*.accdb)のクエリーで日付の所に Like"*/"&Format(date(),"mm/dd") と書いて本日と同じ同月同日を抽出していますが本日ではなく任意の yyyy/mm/ddをあるレコード欄に入力したらその日付の同月同日を抽出するにはクエリーにどの様に書けばよいのか教えてください。

  • 【ACCESS】クエリによる正規表現の基本的書き方

    いつもお世話になっております。 ACCESSのクエリで、下記8パターンにマッチする文字列を yyyyMMddの形で抽出する方法が判りません。 例でも構わないので、ご教示いただけないでしょうか。  (1)yyyyMMdd       (数字は半角)  (2)yyyy年M月dd日   (数字は半角)  (3)yyyy年MM月dd日 (数字は全角)  (4)yyyy年M月dd日   (数字は全角)  (5)yyyy年MM月dd日  (数字は半角)  (6)yyyy年M月dd (数字は半角)  (7)yyyy/MM/dd (数字は全角)  (8)yyyy/MM/dd      (数字は半角)   ※12月32日等の日付不正は対象外 数字の全・半角は区別しなくても抽出可能と考えています。 ただ、そもそも、正規表現の基本的な書き方が判らず。。 グループ化させるための括弧「()」や、論理和の「|」を使うと 抽出できませんでした。 accessでは利用不可なのでしょうか。。 一応、私の作成したクエリを掲載致します。 テーブルaからdate列を抽出します。上記8パターンにマッチする場合は、yyyyMMdd形式で、いずれにもマッチしなければ空白を返させたいと思います。 SELECT IIf (a.date Like '[1-9][0-9][0-9][0-9](0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])', a.date, IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年(0[1-9]|1[012])月(0[1-9]|[12][0-9]|3[01])日', Format(CDate(Format(Replace(Replace(Replace(a.date, '年', ''), '月', ''), '日', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]年[1-9]月(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '年', ''), '月', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), IIf (a.date Like '[1-9][0-9][0-9][0-9]/(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])', Format(CDate(Format(Replace(Replace(a.date, '/', ''), '/', ''), "@@@@/@@/@@")), "yyyymmdd"), '' ) ) ) ) ) ) ) ) FROM a 以上、何卒よろしくお願いいたします。

  • 日付をVARCHAR2型でYYYYMMDDと表示したい

    DATE型(YYYY/MM/DD HH24:MI:SS)の値を取り出し、 VARCHAR2(8)型の文字列YYYYMMDDにしたいと思っています。 TO_CHAR(DATE型,'YYYYMMDD')としても、YY-MM-DDと表示されてしまいます。 YYYYMMDDと文字型で表示させるにはどうすればよいのでしょうか。 宜しくお願い致します。

  • date型

    date型のカラムに1:00という時間を入れたいけどうまくいきません。yyyy/mm/dd hh:mmという形になります。PHPで取り出すときにSUBSTR関数を使って取り出そうとしても取り出せません。無理なのでしょうか??

  • TIMESTAMPを検索するフォームを設けたい

    HTMLで上下にフレーム分割し、 ・上段が検索フォーム ・下段が問い合わせ結果のリストアップ、 という構造があるのですが、MYTIME (timestamp(14))という フィールドの検索フォームはどのように設けるのが一般的でしょうか。 例えば、 ・7月1日以降にデータが更新されたレコードのみ抽出、 ・今日の12:00以降に更新されたレコードのみ抽出、のように用いたいです。 MYTIMEには、 20051221080904 20060701194647 などのレコードがあります。 timestampでなく、date型なら、↓のように、 yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で問い合わせができることを経験してます。 select myfield,mytime from myfield where mytime >= '20060714' select myfield,mytime from myfield where mytime >= '2006/07/14' select myfield,mytime from myfield where mytime >= '2006-07-14' そのとき、検索フォームは <input type="text" name="date_more" maxlength="10" title="yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で入力">以降 <input type="text" name="date_less" maxlength="10" title="yyyy-mm-dd、yyyy/mm/dd、yyyymmdd書式で入力">以前 ・・などとしました。 今回のTIMESTAMP型も、↑と同じでいけますか? 年月日と時分秒は分割したほうがよかったりするのでしょうか? そうすると、SQL文に渡す前に、年月日.時分秒 のようにくっ付けて WHERE条件に加えることになりますよね? 標準的な方法をご教示ください。

    • ベストアンサー
    • PHP
  • ACCESS日付形式について質問です。

    日付抽出条件を含んだフォームを作成したのですが、午前中までyyyy/mm/ddの形式で入力し、抽出できたのですが、今mm/ddの形式で入力しないと抽出できなくなりました。 変更をした覚えはないのですが・・・ yyyy/mm/ddで抽出できる方法を教えてください。 おねがいします。