日付の定型的なFromTo条件

こちらのページは、1.0.x (Java6版) においてのみ、有効な内容 です。

1.1.x (Java8版) では、FromTo を利用してください。

概要

基本概念

日付の定型的なFromTo条件を設定します。DateFromTo は、絞り込み条件を表す ConditionKey です。

FromTo 条件のパターンの比較条件の一つである "日付による範囲条件" を独立させたものです。FromToOption で compareAsDate() を呼び出しているのと同じです。利用頻度が高いと考えられるため、オプションの指定なしに簡易に指定できるようにしています。

単なるエリアスメソッドと言えるので、もろもろの仕様などは FromTo と全く同じです。

会話上では、でいとふろむとぅ日付のFromTo などと表現します。ちなみに、DateFromTo の Date とは、時分秒を含まない日付という概念を示す Date です。(Date 型の Date ではありません)

実装方法

実装の流れ

query() の後、set[date-column-name]_DateFromTo() を呼び出し、第一引数に from に相当する条件値、第二引数に to に相当する条件値を指定します。

e.g. FromTo条件の実装手順 (Eclipseでコード補完) {FORMALIZED_DATETIME} @Java
Date fromDate = ... // 2007/04/10 08:24:53
Date toDate = ... // 2007/04/16 14:36:29
cb.q // .q と打って enter
--
cb.query()
--
// 1. .set まで打つとカラム選択
// 2. FD (FormalizedDatetime) でカラム確定
// 3. DFT (DateFromTo) で enter
cb.query().setFDDFT
--
cb.query().setFormalizedDatetime_DateFromTo(fromDate, toDate);
e.g. 日付で FromTo {FORMALIZED_DATETIME} @DisplaySql
...
 where FORMALIZED_DATETIME >= '2007/04/10 00:00:00'
   and FORMALIZED_DATETIME < '2007/04/17 00:00:00'

時分秒は考慮せずに指定された条件値の日付の範囲内であるかどうかを判定する条件が組み立てられます。 指定された toDate の条件値の時分秒が幾つであろうと、次の日に進めて LessThan を利用し、該当の日のデータが完全に含まれるように自動的に調整されます。 (同時に fromDate の時分秒は切り捨てられます)

細かくはFromToの方を

細かい仕様は、FromTo の compareAsDate() の仕様を調べると良いでしょう。 また、細かい調整が必要になったら、どのみち FromTo の方の利用を検討すると良いでしょう。

定番業務の解決

特に、人が入力・指定した日付で "2007/04/16" までと言った場合、16日中全てが含まれることを意味することが多いですが、素直にコンピュータに読み取らせると "2007/04/16 00:00:00" までと解釈してしまう可能性があり、"2007/04/16 12:34:56" のデータが対象外になってしまいます。 一方で、日付操作はバグの温床、こういった定型的な調整をする機能を使ってできるだけミスを無くすのが良いでしょう。

時分秒なしDATE型に対しては

DateFromTo は、基本的には保持データの日付精度(時分秒あり)と検索条件の日付精度(時分秒なし)が違う場合に有効な機能ですが、 両方とも時分秒なしの場合でも、利用する必要性は高くはないですが問題なく利用できます。