【第37回】 SQL を使って「2月29日」生まれの購読者を「2月28日」 生まれに変更する方法
2 月 29 日生まれの方は、誕生日が 4 年に一度になります。この時、バースデイジャーニーを作って、誕生日の当日に「お祝いクーポン」入りのメールを送りたいと考えているのであれば、その年が閏年に該当せず、2 月 29 日が存在しない場合には、その方の誕生日を 2 月 28 日に変更してメール送信したいですよね。
このような時、Salesforce Marketing Cloud では、SQL クエリアクティビティを使用することで、閏年以外の誕生日を変更することが可能です。
ちなみに、「閏年」の正しい理解はできていますでしょうか?
こちらが法令らしいのですが、読めないですね。Wikipedia に、この現代語訳が載っていました。
うーん。これでも分からないですね。「神武天皇即位紀元年数」というものがそもそも分かりません。
どうやら「グレゴリオ暦」での閏年の計算方法の方が分かりやすそうです。
これで、何かすっきりしましたね。
閏年は 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]
今回は以上です。
次の記事はこちら
前回の記事はこちら
私の note のトップページはこちら
この記事が気に入ったらサポートをしてみませんか?