ここでは日付を操作するSQL関数について紹介します。

日付を編集する

文字列を日付型に変換する(TO_DATE関数)

SELECT
    TO_DATE('2020-03-24', 'YYYY/MM/DD')
FROM
    DUAL
--結果:2020/03/24


書式を指定して編集する(TO_CHAR関数)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'), 'YYYY-MM-DD')
FROM
    DUAL
--結果:2020-03-24


書式を指定して編集する(12時間表記)

SELECT
    TO_CHAR(TO_DATE('2020/03/24 13:52:22'), 'YYYY/MM/DD HH:MI:SS')
FROM
    DUAL
--結果:2020/03/24 01:52:22


書式を指定して編集する(24時間表記)

SELECT
    TO_CHAR(TO_DATE('2020/03/24 13:52:22'), 'YYYY/MM/DD HH24:MI:SS')
FROM
    DUAL
--結果:2020/03/24 13:52:22


西暦を和暦で表示する(24時間表記)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'),
            'EEYY/MM/DD',
            'NLS_CALENDAR = ''JAPANESE IMPERIAL''')
FROM
    DUAL
--結果:平成32/03/24


日付の書式

書式説明
YYYY4桁で表した西暦年
YY2桁で表した西暦年
MM月(01~12)
DD日(1~31)
HH時間(1~12)
HH2424時間表記の時間(0~23)
MI分(00~59)
SS秒(00~59)
FFミリ秒(末尾に桁数を指定する。FF3:3桁のミリ秒)
EE元号(明治、大正、昭和、平成)
E元号の略称(M、T、S、H)
D曜日(1:日曜日~7:土曜日)
DAY曜日(日曜日~土曜日)
AM午前、午後
DDD通年での日(1~366)
WW年の初めからの週数
W月の初めからの週数


日付の情報を取得する

日付の曜日を取得する(DAY)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'), 'DAY')
FROM
    DUAL
--結果:火曜日


時刻が午前か午後かを取得する(AM)

SELECT
    TO_CHAR(TO_DATE('2020/03/24 13:00'), 'AM')
FROM
    DUAL
--結果:午後



年初からの日数を取得する(DDD)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'), 'DDD')
FROM
    DUAL
--結果:084(2020年3月24日の場合)


年初からの週数を取得する(WW)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'), 'WW')
FROM
    DUAL
--結果:12


月初からの週数を取得する(W)

SELECT
    TO_CHAR(TO_DATE('2020/03/24'), 'W')
FROM
    DUAL
--結果:4


月初の日付を取得する

SELECT
    TO_CHAR(TO_DATE('2020/07/07'), 'YYYY/MM') || '/01'
FROM
    DUAL
--結果:2020/07/01


月末の日付を取得する(LAST_DAY関数)

SELECT
    LAST_DAY('2020/07/07')
FROM
    DUAL
--結果:2020/07/31


日付を計算する

月を加算・減算する(ADD_MONTHS関数)

SELECT
    ADD_MONTHS('2020/07/07', - 2) 
FROM
    DUAL; 
--結果:2020/05/07


指定した2つの日付の間の月数を求める(MONTHS_BETWEEN関数)

SELECT
    MONTHS_BETWEEN('2020/10/01', '2020/07/01')
FROM
    DUAL;
--結果:3


指定した2つの日付の差の日数を求める(DATEDIFF関数)

SELECT
    TO_DATE('2020/08/1') - TO_DATE('2020/07/01')
FROM
    DUAL;
--結果:31


指定した書式で日付を切り捨てる(TRUNC関数)

--日を切り捨てて月初にする
SELECT
    TRUNC(TO_DATE('2020/06/25'), 'MM')
FROM
    DUAL;
--結果:2020/06/01

--月を切り捨てて年初にする
SELECT
    TRUNC(TO_DATE('2020/06/30'), 'YYYY')
FROM
    DUAL;
--結果:2020/01/01


以上、日付を操作するSQL関数について解説しました。