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です。TIMESTAMP [(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