見出し画像

AMPScript で生年月日から年齢を計算する/Salesforce Marketing Cloud

生年月日から計算した年齢をメール上に表示する AMPScript を書いたので、備忘録として残します。基本的に、メール上に表示する内容は SQL 等で事前に用意しておくのがベストですが、一応 AMPScript でも年齢を計算できるよ、という程度に紹介します。

スクリプトの説明

%%[

VAR @now, @age
VAR @birthdayMD, @nowMD

/* 1. 現在日時を取得 */
SET @now = DATEADD(NOW(), 15, 'H')

/* 2. 現在日時と誕生日の年差を計算して数値型に変換 */
SET @age = FORMATNUMBER(DATEDIFF(birthday, @now, 'Y'), 'N0')

/* 3. 月と日を結合して数値型に変換 */
SET @birthdayMD = FORMATNUMBER(CONCAT(DATEPART(birthday, 'M'), DATEPART(birthday, 'D')), 'N0')
SET @nowMD = FORMATNUMBER(CONCAT(DATEPART(@now, 'M'), DATEPART(@now, 'D')), 'N0')

/* 4. 現在日時の月日より誕生日の月日が未来の場合、年齢から1を減算 */
IF (@birthdayMD > @nowMD) THEN
  SET @age = SUBTRACT(@age, 1)
ENDIF

]%%

%%=v(@age)=%%歳

1. 現在日時を取得

NOW 関数で現在日時を取得します。NOW 関数は、CST(アメリカ中部時間)の現在日時を返却するので、DATEADD 関数を使って JST(日本時間)に変換しています。

2. 現在日時と誕生日の年差を計算して数値型に変換

DATEDIFF 関数を使って、現在日時と誕生日の年差を計算します。誕生日の値は日付型の「birthday」に入っています。その結果を FORMATNUMBER 関数で数値型に変換します。

3. 月と日を結合して数値型に変換

DATEPART 関数で現在日時と誕生日の月と日の部分を抜き出します。現在日時が 1 月 1 日、誕生日が 6 月 10 日の場合は次のようになります。この時、抜き出した月日は、テキスト型になっています。

現在日時の月:01
現在日時の日:01
誕生日の月:06
誕生日の日:10

次に、CONCAT 関数で抜き出した月と日を結合します。

現在日時:0101
誕生日:0610

そして、FORMATNUMBER 関数で結合した月日を数値型に変換します。

現在日時:101
誕生日:610

4. 現在日時の月日より誕生日の月日が未来の場合、年齢から 1 を減算

現在日時の月日より誕生日の月日が未来の場合、まだ誕生日を迎えていないので、2 で求めた年差から 1 を減算する必要があります。減算には、SUBTRACT 関数を使用します。

このスクリプトの使い道

期間の長いジャーニーの場合、ジャーニーにエントリした後に誕生日を迎えて年齢が変わることがあるので、メール配信時点の年齢を表示したい時には使えると思います。ただ、メール上に最新の情報を表示したい時は、基本的に年齢だけに限らない場合が多いと思います。そのため、最新の情報を格納したデータエクステンションを用意して、LOOKUP 関数でその情報を取得する方法がよりスマートだと思います。