TIMESTAMP WITH LOCAL TIME ZONE は TIMESTAMP の別の変種であり、タイムゾーン情報に敏感です。本記事では主に、TIMESTAMP WITH LOCAL TIME ZONE データ型の構文、パラメータ、使用方法について説明します。
構文
TIMESTAMP [(scale)] WITH LOCAL TIME ZONE
パラメータ
TIMESTAMP [(scale)] のしきい値と精度は scale の値によって決まり、取り得る範囲は [0,9] です。最大値は9(ナノ秒)、最小値は0(秒)、デフォルト値は6(マイクロ秒)です。
使用方法
TIMESTAMP [(scale)] WITH LOCAL TIME ZONE データ型のタイムゾーン情報は、現在のセッションが発生しているタイムゾーンです。値の範囲は 0001-01-01 00:00:00.000000000 から 9999-12-31 23:59:59.999999999 です。TIMASTAMP [(scale)] WITH TIME ZONE との違いは、ユーザーが自分でタイムゾーン情報を入力する必要がない点です。OceanBaseデータベースは、デフォルトのデータベースタイムゾーン +00:00 (変更不可) を直接格納します。ユーザーがデータを検索する際、OceanBaseデータベースはローカルセッションのタイムゾーン (変更可能) を返します。 このデータ型は、常に2層アプリケーション内のクライアントシステムのタイムゾーンで表示される日付情報によく使用されます。TIMESTAMP WITH LOCAL TIME ZONE データ型のデフォルトの入出力形式は NLS_TIMESTAMP_FORMAT によって決定されます。以下のSQLステートメントを実行して日時形式を確認します:
SELECT @@NLS_TIMESTAMP_FORMAT FROM DUAL;
戻り結果:
DD-MON-RR HH.MI.SSXFF AM
データの形式をカスタマイズする必要がある場合は、変換関数を使用できます。TO_CHAR (datetime,fmt) 関数を使用して、データの出力形式を指定できます。この変換関数は、文字列をパラメータ fmt で定義された形式に変換します。fmt が指定されていない場合、TO_CHAR はデータ型のデフォルト形式でデータを返します。TIMESTAMP WITH LOCAL TIME ZONE データ型値の入力形式については、タイムスタンプリテラルを参照してください。
TIMESTAMP WITH LOCAL TIME ZONE データ型には、それに値を代入するための専用のリテラルはありません。タイムゾーン情報は SESSIONTIMEZONE がローカルダイアログのタイムゾーンを返すことで得られます。SESSIONTIMEZONE の値は、カスタムパラメータ TIME_ZONE から取得されます。例:
obclient> CREATE TABLE LocalTZ ( ltzcol TIMESTAMP WITH LOCAL TIME ZONE);
Query OK, 0 rows affected
obclient> INSERT INTO LocalTZ VALUES (TIMESTAMP '2020-02-25 11:10:08.123');
Query OK, 1 row affected
obclient> ALTER SESSION SET TIME_ZONE='+08:00';
Query OK, 0 rows affected
obclient> SELECT SESSIONTIMEZONE, ltzcol FROM LocalTZ;
+-----------------+------------------------------+
| SESSIONTIMEZONE | LTZCOL |
+-----------------+------------------------------+
| +08:00 | 25-FEB-20 11.10.08.123000 AM |
+-----------------+------------------------------+
1 row in set
カスタムパラメータ TIME_ZONE の値を変更することで、SESSIONTIMEZONE を変更できます。例:
obclient> ALTER SESSION SET TIME_ZONE='+00:00';
Query OK, 0 rows affected
obclient> SELECT SESSIONTIMEZONE, ltzcol FROM LocalTZ;
+-----------------+------------------------------+
| SESSIONTIMEZONE | LTZCOL |
+-----------------+------------------------------+
| +00:00 | 25-FEB-20 11.10.08.123000 AM |
+-----------------+------------------------------+
1 row in set