- year関数等を組み合わせて生年月日から満年齢を求めることができます。
- dateBetween関数を使う方法もありますが、その年の誕生日到達前に年齢が加算されるケースがあります。
手順
まずは結果ですが、次の画像ではデータベースに関数列を設けて、生年月日から満年齢を求めています。
(2023/3/25に実行したものです)
式は次のようになっています。
なお関数の入力方法については曜日を求めるの記事で紹介してますのでそちらをご覧ください。
関数式
year(now()) - year(prop("生年月日")) - if(formatDate(prop("生年月日"), "MMDD") > formatDate(now(), "MMDD"), 1, 0)
まずyear関数を使って「年」の差だけを求め、次にformatDate関数を使って生年月日と今日の日付をそれぞれMMDD形式の文字列(「0111」など)に変換・比較し、まだ今年の誕生日に達していなかったら1を引く、という内容です。
次の画像は同様にして、基準日(行ごとに異なる)における満年齢を求めたものです。うるう年を意識したものですが、次の例と比較のうえ確認ください。
関数式
year(prop("基準日")) - year(prop("生年月日")) - if(formatDate(prop("生年月日"), "MMDD") > formatDate(prop("基準日"), "MMDD"), 1, 0)
備考
dateBetween関数の場合
次の画像では、上記の例と同じデータで、dateBetween関数を使って満年齢を求めています。
関数式
dateBetween(now(), prop("生年月日"), "years")
dateBetween関数の引数としてnow関数と生年月日、そして単位としての年を表す「years」の3つを指定しています。ExcelのDATEDIF関数などと近い感覚で使うことができ(日付の引数の順序が逆ですが)とても簡単です。
ただし注意すべきなのは、その年の誕生日到達前に1歳加算されるケースがある点です。
次の画像は上記の(2番目)画像と同じデータを使ってdateBetween関数を使って満年齢を求めた結果ですが、上から5番目の結果が異なっており、2/29生まれの者が翌年の2/28日に1歳となっています。
レアケースではありますが、このように(誕生日到達で1歳加算という)一般的な数え方と異なる結果になる場合がありますのでご留意ください。