-日付関数はNUMBERもしくはDATE型の値をRETURNする。
■SYSDATE
-SYSDATE関数を使用すると現在日時(システム基準)を得られる
-最小単位:1秒
SQL> SELECT TO_CHAR(SYSDATE, 'RRRR-MM-DD HH24:MI:SS') "現在時刻" FROM DUAL; 現在時刻 ------------------- 2013-08-26 12:33:00 SQL> SELECT TO_CHAR(SYSDATE-1, 'RRRR-MM-DD HH24:MI:SS') "1日前現時刻" FROM DUAL; 1日前現時刻 ------------------- 2013-08-25 12:34:08 SQL> SELECT TO_CHAR(SYSDATE-1/24, 'RRRR-MM-DD HH24:MI:SS') "1時間前" FROM DUAL; 1時間前 ------------------- 2013-08-26 11:35:41 SQL> SELECT TO_CHAR(SYSDATE-1/24/60, 'RRRR-MM-DD HH24:MI:SS') "1分前" FROM DUAL; 1分前 ------------------- 2013-08-26 12:36:04 SQL> SELECT TO_CHAR(SYSDATE-1/24/60/10, 'RRRR-MM-DD HH24:MI:SS') "6秒前" FROM DUAL; 6秒前 ------------------- 2013-08-26 12:38:22 SQL> SQL> SELECT TO_CHAR(SYSDATE-(5/24 + 30/24/60 + 10/24/60/60),'RRRR-MM-DD HH24:MI:SS') "5時間30分10秒前" FROM DUAL; 5時間30分10秒前 ------------------- 2013-08-26 07:09:55 SQL>
■SYSTIMESTAMP
-SYSTIMESTAMP関数を使用すると現在の日時を得られる
-最小単位=10億分の1秒
SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'RRRR-MM-DD HH24:MI:SS.FF3') "現在時刻" FROM DUAL; 現在時刻 ----------------------------- 2013-08-26 13:47:24.033 SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'RRRR-MM-DD HH24:MI:SS.FF9') "現在時刻" FROM DUAL; 現在時刻 ----------------------------- 2013-08-26 13:47:42.649000000 SQL> SELECT TO_CHAR(SYSTIMESTAMP -1/24, 'RRRR-MM-DD HH24:MI:SS') "1時間前" FROM DUAL; 1時間前 ------------------- 2013-08-26 12:49:12 SQL> SELECT TO_CHAR(SYSTIMESTAMP -1/24/60, 'RRRR-MM-DD HH24:MI:SS') "1分前" FROM DUAL; 1分前 ------------------- 2013-08-26 13:51:05
■ADD_MONTHS(a, b)
-ADD_MONTHS関数はaの日付にbの月を足した値を返す。
--SYSDATE使用例 SQL> SELECT TO_CHAR(ADD_MONTHS(SYSDATE,3), 'RRRR-MM-DD') "date" FROM DUAL; date ---------- 2013-11-26 --TIMESTAMP使用例 SQL> SELECT TO_CHAR(ADD_MONTHS(SYSTIMESTAMP,3), 'RRRR-MM-DD') "date" FROM DUAL; date ---------- 2013-11-26
■MONTHS_BETWEEN(a1, a2)
-a1とa2の間の月の数をNUMBERタイプで返す
SQL> SELECT MONTHS_BETWEEN(TO_DATE('2013-08-25', 'RRRR-MM-DD') , 2 TO_DATE('2013-07-01', 'RRRR-MM-DD')) "Month" 3 FROM DUAL; Month ---------- 1.77419355
■LAST_DAY(d)
-その月の最終日を返す
SQL> SELECT SYSDATE today, LAST_DAY(SYSDATE) lastday FROM DUAL; TODAY LASTDAY -------- -------- 13-08-26 13-08-31
■NEXT_DAY(d, c1)
-入力しは曜日に対して今度該当の日付を返す
-曜日は1(日)~7(土)を入力
SQL> SELECT SYSDATE today, LAST_DAY(SYSDATE) lastday FROM DUAL; TODAY LASTDAY -------- -------- 13-08-26 13-08-31 SQL> SELECT NEXT_DAY(TO_DATE('20130826', 'RRRRMMDD'), 3) "8月最終火曜日" FROM DUAL; 8月最終 -------- 13-08-27
■ROUND(d[,F])
-Fに指定された単位に四捨五入する。
-Fが年度なら年度で四捨五入、Fが省略されると日が一番近い日に四捨五入される。
SQL> SELECT TO_CHAR(ROUND(TO_DATE('2013-08-26 15:00:01' , 2 'RRRR-MM-DD HH24:MI:SS'), 'YEAR'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(ROUND(TO_DA ------------------- 2014-01-01 00:00:00 SQL> SELECT TO_CHAR(ROUND(TO_DATE('2013-08-26 15:00:01', 2 'RRRR-MM-DD HH24:MI:SS'), 'MONTH'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(ROUND(TO_DA ------------------- 2013-09-01 00:00:00 SQL> SELECT TO_CHAR(ROUND(TO_DATE('2013-08-26 15:00:01', 2 'RRRR-MM-DD HH24:MI:SS'), 'DD'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(ROUND(TO_DA ------------------- 2013-08-27 00:00:00 SQL> SELECT TO_CHAR(ROUND(TO_DATE('2013-08-26 15:00:01', 2 'RRRR-MM-DD HH24:MI:SS')), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(ROUND(TO_DA ------------------- 2013-08-27 00:00:00
■TRUNC(d[,F])
-Fに指定した単位で切り捨てを行なう
SQL> SELECT TO_CHAR(TRUNC(TO_DATE('2013-08-26 15:00:01' , 2 'RRRR-MM-DD HH24:MI:SS'), 'YEAR'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(TRUNC(TO_DA ------------------- 2013-01-01 00:00:00 SQL> SELECT TO_CHAR(TRUNC(TO_DATE('2013-08-26 15:00:01' , 2 'RRRR-MM-DD HH24:MI:SS'), 'MONTH'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(TRUNC(TO_DA ------------------- 2013-08-01 00:00:00 SQL> SELECT TO_CHAR(TRUNC(TO_DATE('2013-08-26 15:00:01' , 2 'RRRR-MM-DD HH24:MI:SS'), 'DD'), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(TRUNC(TO_DA ------------------- 2013-08-26 00:00:00 SQL> SELECT TO_CHAR(TRUNC(TO_DATE('2013-08-26 15:00:01' , 2 'RRRR-MM-DD HH24:MI:SS')), 3 'RRRR-MM-DD HH24:MI:SS') 4 FROM DUAL; TO_CHAR(TRUNC(TO_DA ------------------- 2013-08-26 00:00:00
0 件のコメント:
コメントを投稿