アプリ版:「スタンプのみでお礼する」機能のリリースについて

初投稿ですので至らぬ点があればすいません。

現在サーブレットを学習中で、今つまづいているのがタイトル通りデータベース(以下DB)内の生年月日の情報を用いて、年齢を算出するという問題です。
DB内の情報はすでに
String sql = "SELECT * FROM テーブル名";
と持ってきており、すでに他の情報を表示させることはできています。
このなかの誕生日(カラム名はbirthday)の情報から誕生日を算出するにはどうすればよいのでしょうか。
現在の日付から誕生日の日付を引くのかと思うのですがそこらへんを詳しく解説いただければ幸いです。

どうぞ宜しくお願い致します。

質問者からの補足コメント

  • うーん・・・

    使用しているのはMysqlです。

    後付けで申し訳ないのですが今行っているのがDB内の個人情報のテーブルからレコードを引き出して、それをDaoからjspに渡し、htmlで表にして表示、というものです。
    sqlで年齢を計算した場合、それを他の情報と紐付けて表の同じ列に表示することは可能なんでしょうか。

    一応現在の処理の流れを画像で記載します。(詳しく書こうとしたら文字数制限に引っかかってしましました、申し訳ないです)

    この流れに沿って表示させたいのですがどうすればよいのでしょうか。

    「サーブレット DBにある生年月日の情報か」の補足画像1
      補足日時:2015/12/02 12:12

A 回答 (4件)

別にサーブレットで計算してもたいしたことないし、DBに依存しないで処理をかける。


#SQLは日付の方言が激しいので・・・

java.util.Date型で日付が来るならこんなメソッドを用意すればおしまい。

public int getAge(Date birthDate) {
Calendar now = Calendar.getInstance();
Calendar birth = Calendar.getInstance();
birth.setTime(birthDate);

int age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
if (now.get(Calendar.MONTH) < birth.get(Calendar.MONTH) ||
now.get(Calendar.MONTH) == birth.get(Calendar.MONTH) &&
now.get(Calendar.DAY_OF_MONTH) < birth.get(Calendar.DAY_OF_MONTH)) {
age--;
}
return age;
}
    • good
    • 0

RDBMS名だけでなく、バージョンも明記するようにしてください。


特にMySQLは、MySQL 5.x.xのレベルまで提示してください。MySQLでは、突然、大きな機能拡張や仕様変更が行われることがあります。

birthday列のデータ型は、DATEですか?もしそうなら、日時の関数で容易に年齢を求められます。もし、文字や数値のデータ型なら、日付のデータ型への変換も加える必要があります。

SELECT *,TIMESTAMPDIFF(YEAR,birthday,CURDATE()) AS age
FROM tbl

ageは、年齢の計算結果に付けた別名で、列と同様の方法で、結果を参照できます。

https://dev.mysql.com/doc/refman/5.6/ja/date-cal …
    • good
    • 0

~~infoクラス内に、getAge()、setAge()メソッドも用意すればいいと思います。

    • good
    • 0

DBは何を使っているんですか?


年齢を求めるのに、いちいちサーブレット側で処理する必要はないでしょう。

例えばMySQLならば
SELECT *, TRUNCATE(DATEDIFF(CURRENT_DATE(), birthday) / 365, 0)
AS age
FROM テーブル名
とかでいけるんでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!