Q&A 18

日付を条件として探索する方法(基本編)


DBPro に限らず,データベースで選択,検索などの探索を高速に行なうためには索引を利用することがポイントとなります。しかし,索引を使うには探索条件を定数で指定する必要があります。言い換えれば関数を使うと索引を使った高速な探索はできません。これは関数を用いた場合 1 レコードごとに関数の計算を行なうためです。定数を用いて探索する方法をご紹介します。

今日のデータの探索

例えば「今日のデータ」を選択したいとき,もちろん日付型の項目 [日付] での 項目選択で [値] に「」を指定しても良いですが,条件選択の条件に登録するとしたら以下の式が考えられます。

定数を用いた場合  [日付] = 日付'.'
関数を用いた場合  [日付] = #日付

今月のデータの探索

次に,例えば今日が 4 月 24 日だったとして,[日付] 項目の値が今月の日付のレコードを選択したいとき,条件選択で以下のように指定するのが一般的でしょう。

日付'2000-4-1' ≦ [日付] ≦ 日付'2000-4-30'

これは,日付定数で範囲を指定した例です。しかし 5 月になって今月分(5 月分)を選択するには,日付の部分を改めなければいけません。いつ実行しても今月を選択できる式を作って探索条件に登録しておけば,それを選ぶだけで得たい結果を選択することができます。これも定数で指定する式と,関数を使う式とが考えられます。

定数を用いた場合  日付'1' ≦ [日付] ≦ 日付'e'
関数を用いた場合  #月初(#日付) ≦ [日付] ≦ #月末(#日付)

もし登録するなら,上の定数を使った式がいいでしょう。[日付] をキーにした索引を登録しておき,選択時に索引自動判定をオンにすれば上の式の方が速く選択されます。

<索引によって選択を速くするには>

日付定数を用いて特定の日を探す条件式


今日日付'.'
昨日日付'.' - 日時間隔'1日'
明日日付'.' + 日時間隔'1日'
?日前日付'.' - 日時間隔'?日'
?日後日付'.' + 日時間隔'?日'
今月月初日付'1'
今月末 日付'e'
今月?日日付'?'
先月末日*1日付'1' - 日時間隔'1日'
先月 1 日 日付'1' - 年月間隔'1月'
来月 1 日 日付'1' + 年月間隔'1月'
来月末日*1日付'1' + 年月間隔'2月' - 日時間隔'1日'
先月 21 日日付'21' - 年月間隔'1月'
今年の 1 月 1 日日付'1/1'
今年の 4 月 1 日 日付'4/1'
今年の 12 月 31 日  日付'12/31'
今年の 2 月末日日付'2/e'
*1 各月の末日は月ごとに異なるので「1 日の前日」などにする必要があります。

日付定数を用いて特定の期間を探す条件式

日付定数を用いて期間を指定する条件式では特定の日を範囲指定します。

今月日付'1' ≦[日付]≦ 日付'e'
先月日付'1' - 年月間隔'1月' ≦[日付]≦ 日付'1' - 日時間隔'1日'
来月日付'e' + 日時間隔'1日' ≦[日付]≦ 日付'1' + 年月間隔'2月' - 日時間隔'1日'
今年日付'1/1' ≦[日付]≦ 日付'12/31'
去年日付'1/1' - 年月間隔'1年' ≦[日付]≦ 日付'12.31' - 年月間隔'1年'
来年日付'1/1' + 年月間隔'1年' ≦[日付]≦ 日付'12.31' + 年月間隔'1年'