SQL 関数:日付関数
加減
select DATE_SUB(date_col, INTERVAL 1 SECOND) 〜
SECOND / MINUTE / HOUR / DAY / WEEK / MONTH / YEAR
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
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年後
‘3年減算
SET @dteYMD= DATEADD(yy, -3, @dteNIPYMD)
取得
YEAR() / MONTH() / DAY() / HOUR() / MINUTE() / SECOND() / WEEKDAY()
曜日
select DAYOFWEEK(date_col) 〜
注意
ISO-8601形式
1(日)、2(月) … 7(土)
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:システム日付
切り捨て
秒未満を切り捨て
フォーマット変更
「SQL 関数:変換関数」参照