SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【MySQL】SQLで年度末を計算する

問題

SQLで、年度末ってどうやって計算すればよいですか?(4月区切りの)

4月以前だったら~、4月以降だったら~みたいな条件分岐が必要?

答え

4月以前、以降で場合分けをするのは、素直なアイデアで間違ってはいない。

書き方はいろいろと考えられる。

SELECT CONCAT((YEAR(CURRENT_DATE()) + (MONTH(CURRENT_DATE()) >= 4)), '-03-31')
SELECT CONCAT((YEAR('2000-01-01') + (MONTH('2000-01-01') >= 4)), '-03-31')
SELECT DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL IF(MONTH(CURDATE()) >= 4, 1, 0) YEAR), '%Y-03-31')
SELECT DATE_FORMAT(DATE_ADD('1980-10-10', INTERVAL IF(MONTH('1980-10-10') >= 4, 1, 0) YEAR), '%Y-03-31'

引き算で年度初めを出すには2月の日数が問題になるが、足し算で年度末を出すのなら閏年を考慮しなくてよくて、275日足すことで3月31日以前なら年が繰り上がらない、4月1日以降なら年が繰り上がることを利用すると、これもあり。

SELECT DATE_FORMAT(ADDDATE(curdate(), 275), '%Y-03-31');
SELECT DATE_FORMAT(ADDDATE('2002-12-25', 275), '%Y-03-31');

年度計算

関連するメモ

コメント