- - PR -
数値列から日付計算
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-10-01 12:01
こんにちは。初投稿ですよろしくお願いします。
日付の取得について相談したいです。 日付を分割した複数の列をもつ次のようなテーブルがあります。 ID(int型) 年1(int型) 年2(int型) 月(int型) 日(int型) 1 20 8 9 10 2 20 8 9 20 3 20 8 10 10 このテーブルからある日付以降のデータを取得するWHERE句についてどのような方法がいいでしょうか? 次のように考えました。(DBはDB2/400環境) WHERE CAST(年1||SUBSTR('0' ||年,LENGTH(TRIM(年2)),2)||SUBSTR('0' ||月,LENGTH(TRIM(月)),2)||SUBSTR('0' ||日,LENGTH(TRIM(日)),2) AS DATE) >= '2008-09-15' この場合タイムオーバーになります。(レコード数約2000万レコードあります) 他になにかいい方法はないでしょうか? ご意見お願いします。 | ||||||||
|
投稿日時: 2008-10-01 12:56
そのSQLだとフルスキャンになってしまうからでしょう。
複合インデックスを使って個別の列単位で条件にするか、 関数インデックスを使うかのどちらかが良さそうに思います。 | ||||||||
|
投稿日時: 2008-10-01 13:01
思いつきなんで間違ってるかも AND かえって遅いかもですが
とか。 2100年以降を考えなくていいのなら
とか駄目ですかね。 | ||||||||
|
投稿日時: 2008-10-01 13:04
顔文字になってるところは「8)」のつもりです!
| ||||||||
|
投稿日時: 2008-10-01 13:47
WHERE
年1*1000000+年2*10000+月*100+日>=20080915 というのはどう? 比較する日付を8桁数値に変換が必要かもしれませんけど、使う関数は少なくて済みますよね。 | ||||||||
|
投稿日時: 2008-10-01 13:47
あしゅ様、King様お返事ありがとうございます。
ご意見を頂き感謝します。 | ||||||||
|
投稿日時: 2008-10-01 13:51
ふるふる様お返事ありがとうございます。
ご意見を頂き感謝します。 | ||||||||
|
投稿日時: 2008-10-01 13:53
これから検証しまして応答速度に満足のいくものを実装していきたいと思います。
皆様ありがとうございました。 |