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' ≦[日付]≦ 日付'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年' |