どうも、hosigakiです!
皆さんは、データ分析時に日付の月初や月末を算出したくなる時はありませんか?
今日はその出し方について解説します!
月末と月初の出し方
以下のテーブルがあるとします。
d |
---|
2023-01-01 |
2023-02-27 |
2023-05-16 |
2023-10-20 |
2023-12-31 |
月初と月末を出したい場合は、以下のようなクエリを書けば、抽出可能です!
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
d | beginning | end |
---|---|---|
2023-01-01 | 2023-01-01 | 2023-01-31 |
2023-02-27 | 2023-02-01 | 2023-02-28 |
2023-05-16 | 2023-05-01 | 2023-05-31 |
2023-10-20 | 2023-10-01 | 2023-10-31 |
2023-12-31 | 2023-12-01 | 2023-12-31 |
【解説】月初の出し方
月初を算出クエリは、以下の部分です。
DATE(FORMAT_DATE("%Y-%m-01", d)) AS beginning, /*dカラムの値を月初に変換して抽出*/
ここでは、以下の流れで月初を求めています。
- dカラムの値を月初のSTRING型(文字列)に変換
(例. 「2023-02-27」→「2023-02-01」) - step1 のSTRING型をDATE型に変換
実際のところ、step2 の変換をしなくても月初は抽出できます。
ただ、step1 の段階ではSTRING型(文字列)のままで日付として扱われないため、例えば他の日付との差分を求めたいときなどにエラーが発生してしまいます...。
そのため、後の分析のしやすさを考えて、便宜上step2 の変換を行っています。
【解説】月末の出し方
月末を算出クエリは、以下の部分です。
DATE(FORMAT_DATE("%Y-%m-01", DATE_ADD(d, INTERVAL 1 MONTH)))-1 AS end /*dカラムの値を月末に変換して抽出*/
ここでは、以下の流れで月末を求めています。
月初のときよりも少し長いクエリですが、やってることは簡単です!
- dカラムの値をすべて1ヶ月後の同日の値にする
(例. 「2023-02-27
」→「2023-03-27
」) - step1 の値を月初のSTRING型(文字列)に変換
(例. 「2023-03-27
」→「2023-03-01
」) - step2 の文字列をDATE型に変換
- step3 のDATE型をマイナス1日する
(例. 「2023-03-01
」→「2023-02-28
」)
step4では、「-1」と記述することで1日マイナスしています。ただし、step3の工程でSTRING型からDATE型に変換しておかないと、step4でエラーが発生してしまうので注意です!
今日は、月初と月末の算出方法を紹介しました!
ぜひ実務で機会があれば使ってみてください!
最後まで読んでいただきありがとうございました!
また次の記事でお会いしましょう(^^)/