システム日付、高精度のシステム日付(タイムゾーン付き)を取得する
SYSDATE
SYSTIMESTAMP
return [ datetime | timestamp with timezone ]
なし
- データベースシステム上の日付、または、システムのタイムゾーン付きタイムスタンプ
SYSDATE 関数の内容
「データベースサーバー」 が稼動する OS のシステムコールから取得した日付と時刻(年〜秒)を元に現在日付を戻す。タイムゾーンに関する情報は含まれない。
日付だけや時刻フィールドだけなどを戻すことはできないため TRUNC 関数 で時刻部分を切り捨てたり、EXTRACT 関数 で抽出するなどする。
SYSTIMESTAMP 関数の内容
SYSDATE の高精度版 + タイムゾーン
データベースが存在するシステムの秒の小数部(ミリ秒〜ナノ秒)と「タイムゾーンを含む」日付と時間を戻す。
つまり TIMESTAMP 型ではなく TIMESTAMP WITH TIMEZONE 型である。
この データ型 の違いを些細なものと思っていると痛い目を見ることになるかもしれない。EXTRACT 関数において2つは異なる結果をもたらすためである。(以下の注意参照)
SYSTIMESTAMP の精度について
最大の精度は OS(+BIOS?)により異なっている。(マニュアルから精度の記載が削除されている?、以前は 精度は 9桁と書かれていていたと思う。)
IA32 Windows & 10g は 最大 3桁(ミリ秒)
IA32 Linux & 10g で 最大 6桁 (マイクロ秒)
エンタープライズ向けサーバ(+ UNIX)では 9桁(ナノ秒)
Oracle 8i 以前で小数点以下の秒数を使用したい場合、DBMS_UTILITY.GET_TIME パッケージで代用する。
DBMS_UTILITY.GET_TIME は 任意の基準(起動した時間*1 )からの経過秒を 1/100 秒単位で戻す。
日付の表示フォーマットには以下のパラメータで設定された 日付書式 が使用される。
注意
EXTRACT で SYSTIMESTAMP の戻り値の使用すると UTC+0(標準時) の時間が戻される。⇒ EXTRACT 関数 と SYSTIMESTAMP 関数
ADD_MONTHS, CURRENT_DATE, LAST_DAY, NEW_TIME, NEXT_DAY
これらの関数は、すべて DATE 型関数のため SYSTIMESTAMP と併用する場合には秒数以下が切り捨てされる。
SYSDATE、SYSTIMESTAMP は CHECK 制約で使用できない。
SYSDATE の使用例
SQL> select SYSDATE from dual;
SYSDATE
-------------------
2007-07-07 16:07:15
SYSTIMESTAMP の使用例
SYSTIMESTAMP に精度の引数を指定できるようであるがマニュアルには書かれていないのでサポート対象外の機能の可能性がある。
SQL> select SYSTIMESTAMP from dual;
SYSTIMESTAMP
--------------------------------------
07-07-07 16:28:52.453000 +09:00
SQL> select SYSTIMESTAMP(3) from dual;
SYSTIMESTAMP(3)
--------------------------------------
07-07-07 16:28:56.515 +09:00
SQL> select SYSTIMESTAMP(9) from dual;
SYSTIMESTAMP(9)
--------------------------------------
07-07-07 16:28:59.781000000 +09:00
日付に関する内容
SQL 関数 - SYSDATE,SYSTIMESTAMP 関連