複数のフィールドに日付を整数 (モック フィールド名) として格納するデータベースを使用しています。
- 世紀: CC01: 20
- 年: YR01: 13
- 月: MO01: 7
- 日: DY01: 22
次のように日付を定式化できます。DATE((CC01 * 100 + YR01) || '-' || MO01 || '-' || DY01)
問題は、日付の範囲をフィルタリングする必要がある場合です。たとえば、過去 90 日間を選択したい場合は、次のように記述できます...
WHERE DATE((CC01 * 100 + YR01) || '-' || MO01 || '-' || DY01) >= CURRENT DATE - 90 DAYS
ここでの問題はパフォーマンスです。関数を方程式の右辺に限定して、この式を効率的に書く方法を探しています。
これは、今日の日付で機能する例です (世紀について心配する必要はありません。詳細を省略しています)。
WHERE CC01 = 20 AND YR01 >= RIGHT(YEAR(CURRENT DATE - 7 DAYS),2) AND MO01 >= MONTH(CURRENT DATE - 7 DAYS) AND DY01 >= DAY(CURRENT DATE - 7 DAYS)
これが機能するのは、7 日前に戻ると、現在の月と年が保持されるためです。また、可能であれば、AND と OR の膨大なセットを持たないことを好みます。