[Redshift] 誕生日から年齢を計算する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本来 Redshift でこのような操作を行う事はあまり無いのかもしれませんが、機会があったので備忘録的に残しておきたいと思います。

残念ながら Redshift では「AGE」関数が廃止されているので正攻法となります。

DATEDIFF (YEAR, birth_date, GETDATE ()) + (CASE WHEN DATE_PART (doy, birth_date) > DATE_PART (doy, GETDATE ()) THEN - 1 ELSE 0 END);

まず本年と誕生年の差分(年)を取得し、

DATEDIFF (YEAR, birth_date, GETDATE ())

今日が誕生日付よりも前の場合には1年引きます。

 + (CASE WHEN DATE_PART (doy, birth_date) > DATE_PART (doy, GETDATE ()) THEN - 1 ELSE 0 END)

「doy」は day of year で、日付がその年の何日目かを表します。

Redshift は Postgresql ベースですが、異なる点も多岐にわたるので注意が必要ですね。