Oracle SQL 関数 : LAST_DAY : 指定月の最終日計算
dateRet := LAST_DAY( dateSrc ); LAST_DAYは日付dataSrcの末日の日付を返します。この関数を使えば簡単に該当月の最終日を計算してくれる ので一般の言語の様に別に関数を設ける必要がありません。
SQL> SELECT LAST_DAY(TO_DATE('2000/02/01')),LAST_DAY(TO_DATE('2001/02/01')), 2 LAST_DAY(TO_DATE('2002/02/01')),LAST_DAY(TO_DATE('2003/02/01')) 3 FROM DUAL; LAST_DAY LAST_DAY LAST_DAY LAST_DAY -------- -------- -------- -------- 00-02-29 01-02-28 02-02-28 03-02-28
この例は2000年から2003年の2月の末日を求めています。閏年の計算をしなくても簡単に行えます。
SQL> SELECT 2 LAST_DAY(SYSDATE) AS SYSDATE_LAST 3 ,TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD HH24:MI:SS') AS 日付文字列 4 ,TO_CHAR(TRUNC(LAST_DAY(SYSDATE),'DD'),'YYYY/MM/DD HH24:MI:SS') AS 日付文字列2 5 ,LAST_DAY(TO_DATE('2004/02/01')) FROM DUAL; SYSDATE_ 日付文字列 日付文字列2 LAST_DAY -------- ------------------- ------------------- -------- 04-10-31 2004/10/31 17:53:25 2004/10/31 00:00:00 04-02-29
LAST_DAYは日付部分は月末を返すが、時刻部分は指定日付型の時刻をそのまま引き継ぐ様です。上のSQLを見ると良くわかるとは思いますが、もし時刻が00:00:00が必要であればTRUNC関数で切り捨てる必要があります。