こんちには。
職人見習いの木村です。

会員を持っているWEBサイトを運営している場合、マーケティング用途で年代別の利用者を抽出することがあると思います。
今回は、Postgresqlで年代を算出する書き方を紹介します。

テーブルに以下のようなカラム構成で生年月日が入っているものとします。

  • birthday_yyyy
  • birthday_mm
  • birthday_dd

これを10代から70代までを分けて算出するには以下のcase文を使います。

case
 when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  when extract(year from age(current_date, to_date(to_char(birthday_yyyy * 10000 + birthday_mm * 100 + birthday_dd,'00000000'),'yyyymmdd')))  else '70代以上'
end
) as age,

まずyyyymmddの形にして文字列型に変換、その後datetime型に変換して、current_dateと比較という手順です。
SQLレベルで年代計算できるとそのままプログラムに落とせるので楽です。

※この記事は、なかの人(moresmileman)が書いています。