HOW TO TD(User Engagement)Treasure Data User Engagement

SQLで生年月日から年齢を計算する方法

ホーム » SQLで生年月日から年齢を計算する方法

データマネジメントチームの金野 浩之です。

今回はSQLを使って、生年月日から年齢を計算する方法をご紹介いたします。

SQLによる年齢計算方法

SQLで年齢を計算する場合、日付の差分を取得できるDATE_DIFF関数で求めることができます。DATE_DIFF関数では第2引数と第3引数に指定したtimestampの差分を、第1引数で指定した形式で算出してくれます。

DATE_DIFF(unit , from timestamp1, to timestamp2)

DATE_DIFF関数の引数について

  • 第1引数には求める差分の形式として、year, quarter, month, week, day, hour, minute, second , millisecond のいずれかをシングルコーテーションで括って入力します。今回は年齢を求めたいので、yearを使用します。
  • 第2、3引数には、timestamp形式(yyyy-MM-dd hh:mm:ss)またはdate形式(yyyy-MM-dd)で値を設定します。

下図のようにyyyy-MM-dd形式で誕生日が入っている顧客マスタを例にして、年齢計算を行うSQLを作成してみましょう。

先程のサンプルテーブルから年齢計算を行う場合、以下のようなSQLで求めることができます。※第2、3引数に指定するcolumnは実態に併せて適宜調整してください。

SELECT
 user_id
, birthday
, DATE_DIFF('year'
	, CAST(birthday AS DATE)
	, CAST(TD_TIME_FORMAT(TD_SCHEDULED_TIME(), 'yyyy-MM-dd', 'JST') as DATE)) as age
FROM
 customer
WHERE
  TD_TIME_RANGE( time, null, TD_TIME_ADD(TD_SCHEDULED_TIME(), 'id', 'JST'), 'JST)'
    ポイントは次の3点です

  • 年齢を求めるため、第1引数は ’year’ を指定。
  • 第2引数に誕生日のcolumn名を指定、STRING型で生成されている場合は、CAST関数を使用して、DATE型に型変換しておく。
  • 第3引数はTD_SCHEDULED_TIME関数でquery実行日を指定。TD_TIME_FORMAT関数でyyyy-MM-dd形式に直した上で、 CAST関数でDATE型に変換する

こちらを実行すると、以下のような結果を得ることができます。

SQLによる年代計算方法

年齢を求めることができれば、case式またはfloor関数で簡単に年代を求めることができます。
case式を使った年代判定を行う場合のSQLサンプルは次の通りです。

SELECT
 user_id
, age
, case when age >= 70 then ’70代以上’
	when age >= 60 then ’60代’
	when age >= 50 then ’50代’
	when age >= 40 then ’40代’
	when age >= 30 then ’30代’
	when age >= 20 then ’20代’
	when age >= 10 then ’10代’
			else ’その他’
 end as generation
FROM
 customer

case式の場合、
when age between 10 and 14 then ’10代前半’
when age between 15 and 19 then ’10代後半’ ,,,

のように、5歳刻みの年代を作成することも可能です。

floor関数で年代を求める場合のSQLサンプルは次の通りです。

SELECT
 user_id
, age
, FLOOR( age / 10 )* 10 as generation
FROM
 customer

Floor関数の場合は、処理を1行で記述することができるため、シンプルなSQLになります。

今回紹介いたしましたdate diff関数、case式、floor関数は汎用性が高く、使いこなすことでSQLの利便性が大きく向上するとても便利な関数です。
まだ使ったことが無い方はぜひこの機会にお試しください!

金野 浩之

Data Managementチーム

新卒入社したITベンチャーではASPサービスの運用サポート業務に従事。前職のSaaSベンダーではエンジニアとしてレコメンドエンジン、プライベートDMP、MAツールの新規導入と導入後の技術サポートに約6年従事。プライベートDMPのデータアーキテクト構築、バッチ集計プログラムの作成、レポート画面の構築、MAのシナリオ設計・運用サポートから、SaaSのインフラ基盤構築・運用保守など幅広い業務領域を担当。特に、旅行代理店・化粧品・健康食品通販会社・人材サービス・アパレル・EC通販などBtoC業種での導入・サポートに携わる。2019年よりトレジャーデータに参画。データマネジメントチームの一員として技術的側面からTreasure Data CDPの導入、運用支援を行う。

得意領域 : データアーキテクト、Workflow、SQL、RDBMS、Javascript、MA・レコメンド・WEB接客の設計・実装

Back to top button