SQL 関数一覧 (A‐D) > CURRENT_DATE、CURRENT_TIMESTAMP

現在日付、高精度のタイムゾーン付きセッション日付を取得する Oracle 9i

syntax

CURRENT_DATE - 以下もすべて Oracle 9i
CURRENT_TIMESTAMP ( [ precision] )
LOCALTIMESTAMP ( [ precision] )
return [ datetime | timestamp | timestamp with timezone ]

parameter

precision秒以下の精度 (1〜9)default 6

return

  • データベースシステム上の日付、または、システムのタイムゾーン付きタイムスタンプ

avail

  • SQL および PL/SQL の両方で使用可能。

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


現在日付・システム日付に関連する内容

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト