【第37回】 SQL を使って「2月29日」生まれの購読者を「2月28日」 生まれに変更する方法
2 月 29 日生まれの方は、誕生日が 4 年に一度になります。この時、バースデイジャーニーを作って、誕生日の当日に「お祝いクーポン」入りのメールを送りたいと考えているのであれば、その年が閏年に該当せず、2 月 29 日が存在しない場合には、その方の誕生日を 2 月 28 日に変更してメール送信したいですよね。
このような時、Salesforce Marketing Cloud では、SQL クエリアクティビティを使用することで、閏年以外の誕生日を変更することが可能です。
ちなみに、「閏年」の正しい理解はできていますでしょうか?
明治三十一年勅令第九十号(閏年ニ関スル件
神武天皇即位紀元年数ノ四ヲ以テ整除シ得ヘキ年ヲ閏年トス
但シ紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノノ中更ニ四ヲ以テ商ヲ整除シ得サル年ハ平年トス
こちらが法令らしいのですが、読めないですね。Wikipedia に、この現代語訳が載っていました。
神武天皇即位紀元年数(皇紀年数)を 4 で割って、割り切れる年を閏年とする。ただし、皇紀年数から 660 を引くと 100 で割り切れる年で、かつ 100 で割った時の商が 4 で割り切れない年は平年とする。
うーん。これでも分からないですね。「神武天皇即位紀元年数」というものがそもそも分かりません。
どうやら「グレゴリオ暦」での閏年の計算方法の方が分かりやすそうです。
西暦年が 4 で割り切れる年は(原則として)閏年。
ただし、西暦年が 100 で割り切れる年は(原則として)平年。
ただし、西暦年が 400 で割り切れる年は、必ず閏年。
これで、何かすっきりしましたね。
閏年は 4 年に一度ということは、分かりますよね。ここには例外として、100 年目の節目は、閏年になりません、と書いてあります。さらに、例外の例外として、400 年目の節目は、閏年になりますとも書いてあります。
ここ直近の 100 年目のことだけを考えれば、2000 年、2100 年が対象になりますよね。2000 年は 400 で割り切れるので「閏年」です。2100 年は 400 で割り切れないので「閏年」ではありません。
つまり、単純に 4 年に一度だけ処理を入れるだけでは、閏年対策はできないということになります。上記のような 100 年ルールや 400 年ルールがあるからですね。
ただし・・・
ただしですよ?
次に、そのことが問題になるのって 2100 年ですよね?
これって、あと約 70 年後です。その時まで、皆さんが作ったクエリを含むオートメーションが、動き続けてると思いますか?おそらく、動いてないですよね?
ですので、今回は複雑になるのでクエリに含めません。
それでは、以下がサンプルクエリです。操作対象となるデータエクステンションに「Birthday」という項目名があることを想定しています。
CASE
WHEN MONTH(Birthday) = 2
AND DAY(Birthday) = 29
AND YEAR(GETDATE()) % 4 != 0
THEN DATEFROMPARTS(YEAR(Birthday), 2, 28)
ELSE Birthday
END AS [Update_Birthday]今回は以上です。
