- PR -

SQLで生年月日を元に年齢を取得したい(DB2)

1
投稿者投稿内容
ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-10-08 10:39
DB2ver8を使用しています。

生年月日を元にSQLで年齢を取得したいのですが、
何か良い方法はございませんか?

私なりに調べてみたのですが、どうしても難しかったです。
自作の関数などを作成しても構いません。

もし可能でしたら、ご教示頂けませんか?
よろしくお願いいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-08 11:17
「生年月日 年齢 SQL」で google 検索したら

http://www.shift-the-oracle.com/sql/functions/years_of_age.html

に辿り着いたけど、これを DB2 用に書き換えたら出来ませんか?
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2008-10-08 16:03
http://www.shift-the-oracle.com/sql/functions/years_of_age.html
の説明を参考に、
DB2の DATE, TIME 計算の特性
Fun with Dates and Times
http://www.ibm.com/developerworks/db2/library/techarticle/0211yip/0211yip3.html
を利用すると、以下のような方法でも出来そうに思います。
コード:
CREATE FUNCTION age
 (p_birthday DATE
 ,p_basedate DATE
 ,p_method   INTEGER
 )
 RETURNS INTEGER
 LANGUAGE SQL
 CONTAINS SQL
 DETERMINISTIC
 NO EXTERNAL ACTION
RETURN
CASE p_method
WHEN 0 /* 一般的な満年齢 */ THEN
     (p_basedate - p_birthday) / 10000
WHEN 1 /* 年齢計算に関する法律を考慮
          (誕生日の前日に年齢 +1) */ THEN
     ((p_basedate + 1 DAY) - p_birthday) / 10000
WHEN 2 /* 月末における満年齢 */ THEN
     ((p_basedate + 1 MONTH - DAY(p_basedate + 1 MONTH) DAYS)
      - p_birthday) / 10000
ELSE /* 数え年 */
     YEAR(p_basedate) - YEAR(p_birthday) + 1
END
;


ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-10-08 18:09
Kingさん、とんくまさん
ご回答ありがとうございます。

とんくまさんの方法で無事実現できました。
関数まで作成して頂きありがとうございます。
とても助かりました。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2008-11-01 14:00
http://itpro.nikkeibp.co.jp/article/Watcher/20070822/280097/
http://laurentschneider.com/wordpress/2005/07/how-old-are-you.html

引き算してtruncしてもよかったりする
DB2でどうやるかは知りませんが


[ メッセージ編集済み 編集者: 明智重蔵 編集日時 2008-11-01 14:02 ]
1

スキルアップ/キャリアアップ(JOB@IT)