年齢検索
個人のパーソナルデータをテーブルに持つとき、年齢は年々変動する値だから、生年月日をデータに持って、必要に応じて現在日から年齢を算出するというのは、理にかなっていることではありますが、年齢を条件に該当人物を検索したいということは多々あります。
さらっと、年齢で検索できるようにしてというお願いは、頼む方も引き受けてしまう方も簡単ですが、かなりパフォーマンスの悪い検索だなと思い、その整理など。
検索するには、現在日と生年月日データから年齢を計算し、それが検索条件に該当するかをいちいちチェックして判断してますと、20人や30人なら大した労力になりませんが、1万人とか10万人とかいうデータ量ともなれば、それがコンピューターで行われるにしても、パフォーマンスが悪くなります。
かといって、一日毎に年齢データ更新を行うのも無駄な作業です。
となると、データ側が変更できない以上、検索値の方を変更する方法で考えると、年齢検索条件から検索対象となる生年月日検索条件を求めるのはどうかなと。
【年齢検索条件】
年齢(FROM)
〜
年齢(TO)
より、
【生年月日検索条件】
生年月日(FROM)=現在日+1日−(年齢(TO)+1年)
※明日、年齢(TO)+1歳の誕生日を迎える誕生日の人
〜
生年月日(TO)=現在日−年齢(FROM)
※今日、年齢(FROM)の誕生日を迎える人
例:現在日2008/10/29の10〜20歳ならば、1987/10/30〜1998/10/29の生年月日
となり、
また、年齢を一意で検索するにしても、生年月日では幅がありますので
生年月日(FROM)=現在日+1日−(年齢+1年)
〜
生年月日(TO)=現在日−年齢
例:現在日2008/10/29の10歳ならば、1997/10/30〜1998/10/29の生年月日
で検索する必要が出てきます。>何度か間違えていたので、式あってるかな?
この変換をプログラム上で行うかSQL上で行うかの判断は開発環境にまかせるとして、RDBの仕組みは、日時処理に対して複雑になってしまうとことがありますが、この辺の知識ってあまりまとめられた文章で見ることがありません。
データの持ち方によるので、現場知識になるのかもしれませんが、似たようなことはどこでもあると思います。
上記の方法はあくまでも我流なので、もっといい方法やその理由(着眼点)があったら知りたいです。