0

複数のフィールドに日付を整数 (モック フィールド名) として格納するデータベースを使用しています。

  • 世紀: 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 の膨大なセットを持たないことを好みます。

4

4 に答える 4

1

DB スキーマを変更するアクセス権はありますか? その場合、日付の「生成された列」を検討できます。

https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/expression_generated_columns?lang=en

于 2013-07-22T14:33:27.977 に答える