SQL 単一行関数:日付関数

加減

年の加算
ADD_MONTHS(日付型列名 , 1 * 12)
ADD_MONTHS( TO_DATE(列名,'YYYY/MM/DD'),1 * 12)

月の加算
ADD_MONTHS(日付型列名,1)
ADD_MONTHS( TO_DATE(列名,'YYYY/MM/DD') ,1)

日の加減算
日付型列名 + 1
日付型列名 – 1
TO_DATE('2005/03/29','YYYY/MM/DD') + 1
TO_DATE('2005/03/29','YYYY/MM/DD') – 1

時間の加減算
日付型列名 + 1/24
日付型列名 – 1/24
TO_DATE('2005/03/29','YYYY/MM/DD') + 1/24
TO_DATE('2005/03/29','YYYY/MM/DD') – 1/24

分の加減算
日付型列名 + 1/24/60
日付型列名 – 1/24/60
TO_DATE('2005/03/29','YYYY/MM/DD') + 1/24/60
TO_DATE('2005/03/29','YYYY/MM/DD') – 1/24/60

秒の加減算
日付型列名 + 1/24/60/60
日付型列名 – 1/24/60/60
TO_DATE('2005/03/29','YYYY/MM/DD') + 1/24/60/60
TO_DATE('2005/03/29','YYYY/MM/DD') – 1/24/60/60

日付型変数 + 1
to_date('2018/01/01', 'YYYY/MM/DD') + 1
1日後

日付型変数 + cast('1 days' AS INTERVAL)
1日後
日付型変数 + cast('1 months' AS INTERVAL)
1カ月後
日付型変数 + cast('1 years' AS INTERVAL)
1年後

DECLARE @dteYMD DATETIME

'3年減算
SET @dteYMD= DATEADD(yy, -3, @dteNIPYMD)

取得

月末
LAST_DAY(日付型列名)
LAST_DAY(TO_DATE('2005/03/29','YYYY/MM/DD'))

次の指定曜日の日
NEXT_DAY(日付型列名, 曜日)
NEXT_DAY('2005/03/29' ,1)
NEXT_DAY('2005/03/29' ,'MONDAY')

年/月/日/時/分/秒
EXTRACT(FORMAT FROM 日付)

EXTRACT(YEAR FROM 日付)
EXTRACT(MONTH FROM 日付)
EXTRACT(DAY FROM 日付)
EXTRACT(HOUR FROM 日付)
EXTRACT(MINUTE FROM 日付)
EXTRACT(SECOND FROM 日付)

年の取得
DECLARE @dteYMD DATETIME
DECLARE @dteYEAR DATETIME

SET @dteYEAR= YEAR(@dteYMD)

月の取得
DECLARE @dteYMD DATETIME
DECLARE @dteMONTH DATETIME

SET @dteMONTH= MONTH(@dteYMD)

日の取得
DECLARE @dteYMD DATETIME
DECLARE @dteDAY DATETIME

SET @dteDAY= DAY(@dteYMD)

DATEPART関数
DATEPART( yyyy, TestDate )
⇒ 2000
DATEPART( d, TestDate )
⇒ 1
DATEPART( m, TestDate )
⇒ 4
DATEPART( w, TestDate )
⇒ 1~7(日、月…金、土を表す数字)

時間差

時間差(日)
'2000-08-25' '2000-08-24'
→1
'2000-08-25 12:00:00' '2000-08-25 10:00:00'
→0.083333(2時間差=2/24)
'2000-08-25' + '2000-08-24'
エラー

時間差(月)
MONTHS_BETWEEN(日付型列名, 日付型列名)

MONTHS_BETWEEN('2000-08-25', '2015-06-25')
→2
MONTHS_BETWEEN('2000-08-25', '2015-05-10')
→3.48387097
※1ヶ月未満の差がある場合は31日の日割り計算される。
3ヶ月15日=3+15/31=0.48387097

MONTHS_BETWEEN('2000-04-31', '2015-02-28')
→2
※引数が両方月末の場合は月数のみの差が算出される

時間差(年)
TRUNC(MONTHS_BETWEEN(日付型列名, 日付型列名) /12)
※TRUNC:切り捨て

年齢
TRUNC(MONTHS_BETWEEN(SYSDATE, 誕生日) /12)
TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('2005/03/29','YYYY/MM/DD')) /12)
※SYSDATE:システム日付

切り捨て

date_trunc( 'second', now() )
秒未満を切り捨て