日付型の種類
Oracleの日付型は以下6種類(期間データ型も含む)です。
DATE | SYSDATE |
TIMESTAMP | SYSTIMESTAMP |
TIMESTAMP WITH TIME ZONE | CURRENT_TIMESTAMP |
TIMESTAMP WITH LOCAL TIMEZONE | LOCALTIMEStAMP |
INTERVAL YEAR TO MONTH | SYSDATE + INTERVAL '1-1' YEAR TO MONTH |
INTERVAL DAY TO SECOND | SYSTIMESTAMP + INTERVAL '5 01:00:00' DAY TO SECOND |
DATE型とTIMESTAMP型の違い:ミリ秒単位を含むのがTIMESTAMP(厳格なシステム以外は基本的に日付型はDATE型使うって言ってた。先輩が。)
TIMESTAMP WITH TIME ZONE型とTIMESTAMP WITH TIME ZONE型の違い:
どちらもタイムゾーンの情報を格納するのですが、TIMESTAMP WITH TIME ZONE型がDBのタイムゾーンに変換されてデータが保存されます。例えばDBのタイムゾーンが「ASIA/TOKYO」の場合、ASIA/TOKYOのタイムゾーンに変換されて保存されます。
また、TIMESTAMP WITH TIME ZONE型を取得する時だけタイムゾーン名称が表示されます。「日付 時間 タイムゾーン名称」
INTERVALの違い:どちらも時刻の差分を管理するデータ型。年月がINTERVAL YEAR TO MONTH。日と秒を管理するのがINTERVAL DAY TO SECOND。
タイムゾーンについて
Oracleは世界的に使用されるRDBMSのため各地域に合わせた時刻を表示することができます。(素人目線での説明です。)
- CURRENT_DATE(セッションのタイムゾーン)
- CURRENT_TIMESTAMP(セッションのタイムゾーン)
- SYSDATE(データベースのタイムゾーン)
- SYSTIMESTAMP(データベースのタイムゾーン)
- LOCALTIMESTAMP(セッションのタイムゾーン)
SQL>select systimestamp from dual;
SYSTIMESTAMP
-------------------------------
21-11-28 03:41:28.349648000 GMT
SQL>alter session set time_zone='Asia/Tokyo';
SQL>select current_timestamp from dual;
CURRENT_TIMESTAMP
--------------------------------------
21-11-28 12:41:28.360894000 ASIA/TOKYO
表示について
日付型には数値型や文字列型のように文字列を指定することができないのが特徴のひとつなのですが、システムによっては「年月のみ」「月と日のみ」といった表示をしたい時があると思います。
そんな時はNLS_DATE_FORMATという書式設定を変更することで表示形式を変えることができます。
SQL> select sysdate from dual;
SYSDATE
---------
27-NOV-21
SQL> alter session set NLS_DATE_FORMAT='YYYY/MM/DD';
Session altered.
SQL> select sysdate from dual;
SYSDATE
----------
2021/11/27
NLS_DATE_FORMATで設定の変更を行うことで書式が変更されるのですが、日付型の書式は以下の設定にも影響を受けます。
- NLS_DATE_LANGUAGE
- NLS_TERRITORY
NLS_DATE_LANGUAGEがAMERICANに設定されている場合、下記のようになります。
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd-day';
Session altered.
SQL> select sysdate from dual;
SYSDATE
--------------------
2021-11-28-sunday
NLS_DATE_LANGUAGをJapaneseに変更すると下記のようになります。
SQL>alter session set NLS_DATE_LANGUAGE='Japanese';
SYSDATE
--------------
2021-11-28-日曜日
下記サイトが超わかりやすい解説をしてるので目を通してみてください。