Top > SQL 関数一覧 (A‐D) > CURRENT_DATE、CURRENT_TIMESTAMP
現在日付、高精度のタイムゾーン付きセッション日付を取得する
|
| precision | 秒以下の精度 (1〜9) | default 6 |


CURRENT_DATE 関数の内容
CURRENT_〜 は 「データベースサーバー」 をホストする OS のシステムコールで取得した日付を セッションタイムゾーン に変換した現在日付と時刻(年〜秒)を戻す。タイムゾーンに関する情報は含まれない。
CURRENT_TIMESTAMP 関数の内容
データベースが存在するシステムの秒の小数部と「タイムゾーンを含む」日付と時間を戻す。
つまり TIMESTAMP 型ではなく TIMESTAMP WITH TIMEZONE 型である。
この データ型 の違いを些細なものと思っていると痛い目を見ることになるかもしれない。EXTRACT 関数において2つは異なる結果をもたらすためである。(以下の注意参照)
タイムゾーンは「セッションタイムゾーン」に変換される。デフォルトの精度は 6 桁、Oracle 10g の時点で最大 9 桁までを指定することができる。
LOCALTIMESTAMP 関数の内容
CURRENT_TIMESTAMP と機能的には似通っており、「セッションタイムゾーン」に変換されたタイムスタンプを戻すが TIMESTAMP 型を戻す(※)。つまり、セッションタイムゾーンのタイムスタンプに変換されているがタイムゾーン情報は削除されている。
(※) 戻り値のデータ型は TIMESTAMP WITH LOCAL TIME ZONE 型ではない。
注意CURRENT_DATE や LOCALTIMESTAMP とシステム日付は別のものである。 システム日付 は SYSDATE と SYSTIMESTAMP をあらわす。
EXTRACT で CURRENT_TIMESTAMP の戻り値の使用すると UTC の時間が戻される。⇒ EXTRACT 関数 と CURRENT_TIMESTAMP 関数
CURRENT_DATE の使用例
SQL> select CURRENT_DATE from dual; CURRENT_DATE ------------------- 2007-07-07 16:28:54
CURRENT_TIMESTAMP の使用例
使用した環境が Windows ベースであるために秒以下の精度が 3桁 までしかない。(プラットホームによって異なる)
SQL> select CURRENT_TIMESTAMP from dual; CURRENT_TIMESTAMP -------------------------------- 07-07-07 16:37:04.281000 +09:00 SQL> select CURRENT_TIMESTAMP(1),CURRENT_TIMESTAMP(3) from dual; CURRENT_TIMESTAMP(1) CURRENT_TIMESTAMP(3) ---------------------------------- ---------------------------------- 07-07-07 16:37:04.3 +09:00 07-07-07 16:37:04.296 +09:00 SQL> select CURRENT_TIMESTAMP(6),CURRENT_TIMESTAMP(9) from dual; CURRENT_TIMESTAMP(6) CURRENT_TIMESTAMP(9) ---------------------------------- ---------------------------------- 07-07-07 16:37:04.296000 +09:00 07-07-07 16:37:04.296000000 +09:00
SYSDATE と CURRENT_DATE の違い
OS 上の日付 (JST) は 2007-07-07 14:20:15 でセッションタイムゾーンを 標準時(UTC) に設定した場合
SQL> alter session set time_zone='UTC'; SQL> select CURRENT_DATE, sysdate, TZ_OFFSET(sessiontimezone) from dual; CURRENT_DATE SYSDATE TZ_OFFSET(SESS ------------------- ------------------- -------------- 2007-07-07 05:20:15 2007-07-07 14:20:15 +00:00
セッションタイムゾーン
データベースに接続した「セッション」任意に変更可能なタイムゾーン
ORA_SDTZ 環境変数 やSQL> ALTER SESSION SET TIME_ZONE='JAPAN';から変更が可能。他にも タイムゾーン・オフセット(+09:00)指定や 'Asia/Tokyo' と指定しても同じ効果がある。但しタイムゾーン名と略称の取得結果には違いが生じる。
SYSTIMESTAMP と CURRENT_TIMESTAMP の違い
SQL> alter session set time_zone='japan'; SQL> alter session set nls_timestamp_tz_format ='RR-MM-DD HH24:MI:SS.FF TZR'; SQL> select CURRENT_TIMESTAMP, systimestamp from dual; CURRENT_TIMESTAMP SYSTIMESTAMP -------------------------------- -------------------------------- 07-07-07 16:59:05.062000 JAPAN 07-07-07 16:59:05.062000 +09:00
LOCALTIMESTAMP と CURRENT_TIMESTAMPの違い
SQL> alter session set time_zone='Asia/Tokyo'; SQL> alter session set nls_timestamp_tz_format ='RR-MM-DD HH24:MI:SS.FF TZD'; SQL> select LOCALTIMESTAMP, current_timestamp from dual; LOCALTIMESTAMP CURRENT_TIMESTAMP -------------------------------- -------------------------------- 07-07-16 07:13:26.031000 07-07-16 07:13:26.031000 JST