sign関数を使って、if文を使わずに年度や期を計算する方法
2022年08月16日
ファイル一覧を出力するツールを公開する前に、
その中で使っている小ネタを先に紹介。
今回は、年度や期の計算について。
当たり前だけど、2022年度は2022年4月1日~2023年3月31日。
会社の期は、創立記念が1983年だったら、年度から1982年を引けばいい。
if文を使って、month(date) < 4 ならば、年から1を減算すればいいけど
ここはスマートにいきたいところ。
入社して10年くらい悩んでいたけど、最近やっと閃いた。
その中で使っている小ネタを先に紹介。
今回は、年度や期の計算について。
当たり前だけど、2022年度は2022年4月1日~2023年3月31日。
会社の期は、創立記念が1983年だったら、年度から1982年を引けばいい。
if文を使って、month(date) < 4 ならば、年から1を減算すればいいけど
ここはスマートにいきたいところ。
入社して10年くらい悩んでいたけど、最近やっと閃いた。
符号関数signを使えばいいんだ!
sign関数は、数値が正なら+1、負なら-1、0なら0を返す。
なので、sing(month(date) - 3.5) とすれば、
①month(date) < 4 ならば-1、②month(date) >= 4 ならば+1を返す。
[sign{month(date) - 3.5} -1 ]/2に変形すると
①month(date) < 4 ならば-1、②month(date) >= 4 ならば0を返すので、これを年に足せばOK。
sign関数は、論理式の演算でも便利なのでご活用を!
以下、計算例。
C5 = 2022/3/16として、
D5 = (sign{month(C5) - 3.5} -1 )/2 → (sing{-0.5}-1)/2 → (-1-1)/2 → -1
E5 = Year(C5)+D5 (年度計算)
F5 = E5 - 1982(期)
C6 = 2022/4/16として、
D6 = (sign{month(C6) - 3.5} -1 )/2 → (sing{0.5}-1)/2 → (1-1)/2 → 0
E6 = Year(C6)+D6
F6 = E6 - 1982(期)
PR
Comment