Oracle SQL 月末・月初を取得する方法

Oracle SQLで月末・月初を取得する方法です。

Oracle SQL 月末・月初を取得する方法

何かと実務で使うSQLでの日付操作。関数としては、「TO_CHAR」「TO_DATE」、それに「LAST_DAY」使って求めます。

ここでは Oracle SQLで月末・月初を取得する方法 を紹介します。


月初を取得する

月初を取得するには YYYY/MM/DD 形式の DD 部分を「01」に固定することで取得できます。

SELECT
 TO_CHAR(SYSDATE, 'YYYY/MM') || '/01'-- YYYY/MM/DD形式の文字列型
,TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01', 'YYYY/MM/DD')--日付型
--結果 2021/09/01
FROM
 DUAL

月末を取得する

月末を取得するには LAST_DAY 関数を使います。これを使えば30日だろうと31日だろうと、うるう年だろうと対応できます。

LAST_DAY ( datetime ) 引数の日時の月末日を求める。
引数:datetime 日付型
戻り値:日付型

SELECT
 SYSDATE--2021/09/21 09:31:52
,LAST_DAY(SYSDATE)--2021/09/30 09:31:52
,LAST_DAY(TO_DATE('2020/02','YYYY/MM'))--2020/02/29
FROM
 DUAL

翌月末・前月末を取得する

月末を取得できると、翌月末とか前月末を取得したくなりますね。この場合 ADD_MONTHS 関数を使えば取得できます。

ADD_MONTHS ( datetime , integer ) 引数の日時に月数を加減算する。
引数:datetime 日付型, integer 加減算する月数
戻り値:日付型

SELECT
 SYSDATE--2021/09/21 09:31:52
,LAST_DAY(SYSDATE)--2021/09/30 09:31:52
,LAST_DAY(ADD_MONTHS(SYSDATE, 1))--2021/10/31 09:31:52
,LAST_DAY(ADD_MONTHS(SYSDATE, -1))--2021/08/31 09:31:52
FROM
 DUAL

まとめ

Oracle SQLで月末・月初を取得する方法を紹介しました。

どの言語でもそうなんだけど、日付操作って結構めんどくさいんですよねぇ。特にJavaとか。その点OracleのSQLは関数も扱いやすくて便利な気がするのは筆者だけでしょうかね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。