データマネジメントチームの金野 浩之です。
今回は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の利便性が大きく向上するとても便利な関数です。まだ使ったことが無い方はぜひこの機会にお試しください!