こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PostgreSQLのフィールドデータ型Intervalについて

urizakaです

JSP+PostgreSQLで登録のためのシステムを作成しているのですが、その中で入力された誕生日から現在の年齢を計算し、たまったデータから後で年齢検索(たとえば20歳~29歳)を行えるようにしたいと考え、Interval(正確にはInterval Year)というフィールドを使ってみたのですが、このフィールドに

insert into exam(age) values(now() - '1999/12/31');

というようなSQL文を使ってデータを入れると

   age
----------------------------
949 days 12:59:22.1089999974

となります、今度はこのデータを年齢として取り出したいのですが、この状態からどうやって年齢を取り出して良いのかがわかりません。

select to_Char(age,'YY') from exam where code_ID =1

とSQL文を入力しても「00」という回答が帰ってきてしまいます。
どのようにすれば、ちゃんと年齢を返すようになるのでしょうか?
すみませんが、ご存知の方がいらっしゃったら教えてください。
ちなみに、

update exam set age='20years' where code_id=1

とSQL文を入力すると「20years」と入力されることにヒントがありそうな気もするのですが・・・

環境 OS:Windows2000
   DB:PostgreSQL7.2.1(Windows-Native版)
言語:Java(J2SDK1.4)

よろしくお願いします。

投稿日時 - 2002-08-06 13:17:20

QNo.330245

困ってます

質問者が選んだベストアンサー

いくつか問題があるようですが。

intervalでは「年齢」がわからないので、DBの外でプログラミングが必要かと思います。
一年の長さは閏年があるので変わるし、時間の基点がないと「年齢」は分からないってこと。

数日の誤差を含んでよいなら力技がありそうだけど。

interval型は日付型ではないのでフォーマット変換もうまくいかないようですね。

投稿日時 - 2002-08-08 21:50:27

お礼

urizakです

そうでしたか、DB外での処理が必要ですか…
楽しようと考えてはいけないということですね。
さっそくJavaで年齢プログラムを作ってみようと思います。
どうもありがとうございました。

投稿日時 - 2002-08-09 16:03:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

力技ってのは、

そのintervalを'2000/01/01'に加算し、'YYY'でフォーマットするとか。
100才以上の人にも対応してあげてください。

最大2日のずれに収まるのではないかと。

投稿日時 - 2002-08-09 19:53:20