【SQL】月初と月末の算出方法

【SQL】月初と月末の算出方法

どうも、hosigakiです!

皆さんは、データ分析時に日付の月初や月末を算出したくなる時はありませんか?
今日はその出し方について解説します!

月末と月初の出し方

以下のテーブルがあるとします。

d
2023-01-01
2023-02-27
2023-05-16
2023-10-20
2023-12-31
hogeテーブル


月初と月末を出したい場合は、以下のようなクエリを書けば、抽出可能です!

SELECT
  d,  /*dカラムの値をそのまま抽出*/
  DATE(FORMAT_DATE("%Y-%m-01", d)) AS beginning,  /*dカラムの値を月初に変換して抽出*/
  DATE(FORMAT_DATE("%Y-%m-01", DATE_ADD(d, INTERVAL 1 MONTH)))-1 AS end  /*dカラムの値を月末に変換して抽出*/
from
  hoge
dbeginningend
2023-01-012023-01-012023-01-31
2023-02-272023-02-012023-02-28
2023-05-162023-05-012023-05-31
2023-10-202023-10-012023-10-31
2023-12-312023-12-012023-12-31
抽出結果

【解説】月初の出し方

月初を算出クエリは、以下の部分です。

DATE(FORMAT_DATE("%Y-%m-01", d)) AS beginning,  /*dカラムの値を月初に変換して抽出*/

ここでは、以下の流れで月初を求めています。

  1. dカラムの値を月初のSTRING型(文字列)に変換
    (例. 「2023-02-27」→「2023-02-01」)
  2. step1 のSTRING型をDATE型に変換

実際のところ、step2 の変換をしなくても月初は抽出できます。
ただ、step1 の段階ではSTRING型(文字列)のままで日付として扱われないため、例えば他の日付との差分を求めたいときなどにエラーが発生してしまいます...。
そのため、後の分析のしやすさを考えて、便宜上step2 の変換を行っています。

【解説】月末の出し方

月末を算出クエリは、以下の部分です。

DATE(FORMAT_DATE("%Y-%m-01", DATE_ADD(d, INTERVAL 1 MONTH)))-1 AS end  /*dカラムの値を月末に変換して抽出*/

ここでは、以下の流れで月末を求めています。
月初のときよりも少し長いクエリですが、やってることは簡単です!

  1. dカラムの値をすべて1ヶ月後の同日の値にする
    (例. 「2023-02-27」→「2023-03-27」)
  2. step1 の値を月初のSTRING型(文字列)に変換
    (例. 「2023-03-27」→「2023-03-01」)
  3. step2 の文字列をDATE型に変換
  4. step3 のDATE型をマイナス1日する
    (例. 「2023-03-01」→「2023-02-28」)

step4では、「-1」と記述することで1日マイナスしています。ただし、step3の工程でSTRING型からDATE型に変換しておかないと、step4でエラーが発生してしまうので注意です!

今日は、月初と月末の算出方法を紹介しました!
ぜひ実務で機会があれば使ってみてください!

最後まで読んでいただきありがとうございました!
また次の記事でお会いしましょう(^^)/

-SQL
-, ,