日付関数

ORACLEの日付関数のリファレンスです。

※当ページにおいて、検索結果イメージの半角スペースは【_】、NULLは【NULL】と表現しています。

スポンサーリンク

ADD_MONTHS

文法
ADD_MONTHS(引数1[日付型],引数2[数値型])

戻り値
日付型

説明
引数1に引数2(月数)を加えた日付値をDATE型で戻す
引数2(月数)にマイナス値を設定することで減算も可能

SELECT a
      ,ADD_MONTHS(a,1)  func1
      ,ADD_MONTHS(a,-1) func2
FROM   test_table
;

A          FUNC1      FUNC2
---------- ---------- ----------
2016/01/20 2016/02/20 2015/12/20

備考
1月30日の1月加算といった加算減算結果が月の最終日を超える場合、
月の最終日を戻す

SELECT a
      ,ADD_MONTHS(a,1)  func1
      ,ADD_MONTHS(a,-1) func2
FROM   test_table
;

A          FUNC1      FUNC2
---------- ---------- ----------
2016/03/31 2016/04/30 2016/02/29

また、月の最終日を引数1に指定した場合、月の最終日を戻す

SELECT a
      ,ADD_MONTHS(a,1)  func1
      ,ADD_MONTHS(a,-1) func2
FROM   test_table
;

A          FUNC1      FUNC2
---------- ---------- ----------
2016/02/29 2016/03/31 2016/01/31

上記2つの特性から、ADD_MONTHSを複数重ねる場合は注意が必要
1回で処理する場合と結果が変わることがある

SELECT a
      ,ADD_MONTHS(a,2) func1
      ,ADD_MONTHS(ADD_MONTHS(a,1),1) func2
FROM   test_table
;

A          FUNC1      FUNC2
---------- ---------- ----------
2016/01/30 2016/03/30 2016/03/31
スポンサーリンク

NEXT_DAY

文法
NEXT_DAY(引数1[日付型],引数2[文字型](曜日の名称))
NEXT_DAY(引数1[日付型],引数2[数値型](週初めからの日数1~7))

戻り値
日付型

説明
引数1より未来で直近の引数2(曜日)の日付値をDATE型で戻す

引数2で曜日の名称を指定・・・
NLS初期化パラメータのNLS_DATE_LANGUAGEがJAPANESEの場合、
‘月曜日’~’日曜日’を指定する
※略称での指定も可能(‘月’や’月曜’)

引数2で週初めからの日数を指定・・・
NLS初期化パラメータのNLS_TERRITORYがJAPANの場合、
1が日曜日、2が月曜日・・・7が土曜日となる
※月曜日が週初めの国もあるので注意(ドイツ、フランス、イギリスなど)
 日曜日が週初めの国(日本、アメリカ、中国など)

SELECT a
      ,NEXT_DAY(a,'月曜日') func1
      ,NEXT_DAY(a,'月曜')   func2
      ,NEXT_DAY(a,'月')     func3
      ,NEXT_DAY(a,2)        func4
FROM   test_table
;

A          FUNC1      FUNC2      FUNC3      FUNC4
---------- ---------- ---------- ---------- ----------
2016/07/01 2016/07/04 2016/07/04 2016/07/04 2016/07/04

LAST_DAY

文法
LAST_DAY(引数1[日付型])

戻り値
日付型

説明
引数1の月末日付をDATE型で戻す

SELECT a
      ,LAST_DAY(a,1) func
FROM   test_table
;

A          FUNC
---------- ----------
2016/07/04 2016/07/31

MONTHS_BETWEEN

文法
MONTHS_BETWEEN(引数1[日付型],引数2[日付型])

戻り値
数値型

説明
引数1・2間の月数を計算する
引数1・2が同じ日であるか、どちらも月末の場合、差を整数で戻す(時分秒は加味しない)
上記以外の場合、1カ月を31日として差を小数部ありで戻す(時分秒を加味する)
引数1>引数2の場合正の値となり、引数1<引数2の場合負の値を戻す

SELECT a
      ,b
      ,MONTHS_BETWEEN(a,b) func
FROM   test_table
;

A          B                FUNC
---------- ---------- ----------
2016/07/04 2016/06/04          1
2016/07/31 2016/06/30          1
2016/06/04 2016/07/04         -1
2016/07/04 2016/06/03 1.03225806

ROUND

文法
ROUND(引数1[日付型(DATE型)],引数2[文字型](丸める単位))
※引数2は省略可能、省略した場合’DD’と同義

戻り値
日付型

説明
引数1を引数2で指定した単位で丸めた日付値をDATE型で戻す

引数2のフォーマット

書式モデル 切捨て単位 境界
CC
SCC
世紀 xx51年
YYYY
SYYYY
YEAR
SYEAR
YYY
YY
Y
7月
Q 四半期 2月5月8月11月の16日
MM
MONTH
MON
RM
16日
WW 対象となる年の最初の日と同じ曜日
W 対象となる月の最初の日と同じ曜日
DAY
DY
D
開始曜日 水曜日の12時
DD
DDD
J
12時
HH
HH12
HH24
時刻 30分
MI 30秒
SELECT a
      ,ROUND(a,'YYYY') func
FROM   test_table
;

A          FUNC
---------- ----------
2016/06/31 2016/01/01
2016/07/01 2017/01/01

SYSDATE

文法
SYSDATE

戻り値
日付型

説明
システム日時をDATE型で戻す

SELECT SYSDATE func
FROM   test_table
;

FUNC
----------
2016/07/26
SELECT TO_CHAR(SYSDATE,'YYYY/MM/DD') func1
      ,TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') func2
FROM   test_table
;

FUNC1       FUNC2
----------- --------------------
2016/07/26  2016/07/26 23:59:59

SYSTIMESTAMP

文法
SYSTIMESTAMP

戻り値
日付型(TIMESTAMP WITH TIME ZONE型)

説明
システム日時をTIMESTAMP WITH TIME ZONE型で戻す
SYSDATEでは取得できない小数秒も取得できる
小数秒の精度はOSや基盤によって異なり注意が必要

SELECT SYSTIMESTAMP func
FROM   test_table
;

FUNC
----------
2016/07/26
SELECT TO_CHAR(SYSTIMESTAMP,'YYYY/MM/DD') func1
      ,TO_CHAR(SYSTIMESTAMP,'YYYY/MM/DD HH24:MI:SS.FF3') func2
FROM   test_table
;

FUNC1       FUNC2
----------- ------------------------
2016/07/26  2016/07/26 23:59:59.123

TO_CHAR

文法
TO_CHAR(引数1[日付型])
TO_CHAR(引数1[日付型],引数2[文字型(日時書式フォーマット)])

戻り値
文字型

説明
引数1を引数2のフォーマットで文字型に変換し戻す
引数2を省略した場合は、NLS初期化パラメータのNLS_DATE_FORMATが使用される

引数2の日時書式フォーマット(代表的なものを掲載)

書式モデル 説明
YYYY 西暦
Y~YYY 西暦の下1~3桁
MM 月(2桁の数値)
DD 日(2桁の数値)
HH24 時刻(24時間表記)
MI
SS
FF1~FF9 秒の小数部(引数1がTIMESTAMP WITH TIME ZONE型などの場合のみ有効)
D 曜日(1桁の数値) 週の初めからの日にち(1~7)
NLS初期化パラメータのNLS_TERRITORYに依存
日本(JAPAN)、アメリカ、中国などは、1が日曜日となる
ドイツ、フランス、イギリスなどは、1が月曜日となる
-/,.;:
半角スペース
区切り文字
ハイフン、スラッシュ、カンマ、ドット、セミコロン、コロン、半角スペース
SELECT SYSTIMESTAMP func
FROM   test_table
;

FUNC
----------
2016/07/26
SELECT TO_CHAR(SYSDATE,'YYYYMMDD') func1
      ,TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') func2
FROM   test_table
;

FUNC1       FUNC2
----------- --------------------
2016/07/26  2016/07/26 23:59:59

TO_DATE

文法
TO_DATE(引数1[文字型])
TO_DATE(引数1[文字型],引数2[文字型(日時書式フォーマット)])

戻り値
日付型

説明
引数1を引数2のフォーマットでDATE型に変換し戻す
引数2を省略した場合は、NLS初期化パラメータのNLS_DATE_FORMATが使用される
また、指定しなかったフィールドは自動的に補完される

引数2の日時書式フォーマット(代表的なものを掲載)

書式モデル 説明
YYYY 西暦
Y~YYY 西暦の下1~3桁
MM 月(2桁の数値)
DD 日(2桁の数値)
HH24 時刻(24時間表記)
MI
SS
-/,.;:
半角スペース
区切り文字
ハイフン、スラッシュ、カンマ、ドット、セミコロン、コロン、半角スペース
SELECT a
      ,TO_DATE(a,'YYYYMMDD') func
FROM   test_table
;

A         FUNC
--------- ----------
20160726  2016/07/26

TRUNC

文法
TRUNC(引数1[日付型(DATE型)],引数2[文字型](丸める単位))
※引数2は省略可能、省略した場合’DD’と同義

戻り値
日付型

説明
引数1を引数2で指定した単位で切捨てた日付値をDATE型で戻す

引数2のフォーマット

書式モデル 切捨て単位
CC
SCC
世紀
YYYY
SYYYY
YEAR
SYEAR
YYY
YY
Y
Q 四半期
MM
MONTH
MON
RM
WW 対象となる年の最初の日と同じ曜日
W 対象となる月の最初の日と同じ曜日
DAY
DY
D
開始曜日
DD
DDD
J
HH
HH12
HH24
時刻
MI
SELECT a
      ,TRUNC(a,'YYYY') func
FROM   test_table
;

A          FUNC
---------- ----------
2016/06/31 2016/01/01
2016/07/01 2016/01/01
タイトルとURLをコピーしました