月末の日付を求める、その月の同月、同時刻の末日日付を求める
LAST_DAY ( datetime )
return [ DATE ]
- 日付式 datetime の日にちの要素を同じ月の月末に変換する。
LAST_DAY 関数の内容
日付式 datetime の日にちの要素を同じ月の月末に変換する。
時刻フィールド保存の仕様に注意
マニュアルには特に記載はないものの、日にちより以下の時、分、秒は datetime の値をそのまま継承する。データベースの日付項目を取得して、その日付を末日に変換 +1 日して「対象月」の条件として組み込んでいる場合などには時間項目を 日にち単位で切り捨て処理 を施さないと間違った検索結果になる可能性がある。
TIMESTAMP 型の引数に注意
日付式 datetime に TIMESTAMP 型を使用すると DATE 型に暗黙変換されて秒以下の情報を切り捨て(損失)する。
LAST_DAY 使用例
SQL> select dt, LAST_DAY(dt) from last_day_sample;
DT LAST_DAY(DT)
------------------- -------------------
2000-01-01 01:01:01 2000-01-31 01:01:01
2000-02-02 02:02:02 2000-02-29 02:02:02
SQL> select dt, LAST_DAY(dt),
2 trunc(dt, 'month'),
3 extract(day from LAST_DAY(dt)) from last_day_sample2;
DT LAST_DAY(DT) TRUNC(DT,'MONTH') EXTRACT(DAYFROMLAST_DAY(DT))
------------------- ------------------- ------------------- ----------------------------
2000-01-01 01:01:01 2000-01-31 01:01:01 2000-01-01 00:00:00 31
2000-02-02 02:02:02 2000-02-29 02:02:02 2000-02-01 00:00:00 29
2000-03-03 03:03:03 2000-03-31 03:03:03 2000-03-01 00:00:00 31
2001-02-02 12:12:12 2001-02-28 12:12:12 2001-02-01 00:00:00 28
2100-02-04 22:22:22 2100-02-28 22:22:22 2100-02-01 00:00:00 28
⇒ 日付要素を取り出す関数 / 日付の切り捨て
月初めを取得するには
月初めを取得するには TRUNC 関数 を使用すればよい。
FIRST_DAY ファンクション (月初めを取得)
P_DATE において月初の日付を戻す関数
CREATE OR REPLACE FUNCTION RIVUS.FIRST_DAY(P_DATE IN DATE)
RETURN DATE
IS
BEGIN
RETURN TRUNC(P_DATE, 'MONTH');
-- RETURN TRUNC(P_DATE, 'MM');
END;
SQL 関数 - LAST_DAY 関連