OceanBaseは、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE の3種類のタイムスタンプリテラルをサポートしています。
TIMESTAMPリテラル
TIMESTAMP[(scale)] データ型は、年、月、日、時、分、秒、および小数秒の値を格納します。TIMESTAMPリテラルを指定する場合、秒フィールドの精度は最大で9番目のナノ秒まで指定できます。
TIMESTAMP '2020-02-25 11:26:18.316'
TIMESTAMP WITH TIME ZONEリテラル
TIMESTAMP WITH TIME ZONEリテラルは、タイムゾーン情報を含むタイムスタンプリテラルです。
TIMESTAMP [(scale)] WITH TIME ZONE データ型は TIMESTAMP[(scale)] データ型の一種であり、TIMESTAMP[(scale)] データ型に加えて、タイムゾーンオフセットやタイムゾーンエリア名などの情報も格納します。TIMESTAMP WITH TIME ZONEリテラルを指定する際には、タイムゾーン情報を指定する必要があり、秒フィールドの精度は最大で9番目のナノ秒まで指定できます。以下の例では、タイムゾーンオフセットを使用してタイムゾーンフィールドの値を指定しています:
TIMESTAMP '2020-02-25 11:26:18.316 +08:00'
二つのTIMESTAMP WITH TIME ZONEリテラルの値がGMTタイムゾーンの同じ時刻を表す場合、それらのタイムゾーンフィールドの値が異なっていても、同じリテラルと見なされます。
以下の例のように、GMT-8タイムゾーンの午前8時とGMT-5タイムゾーンの午前11時は実際には同じ時刻です:
TIMESTAMP '2020-04-25 08:26:18.316 -08:00'
TIMESTAMP '2020-04-25 11:26:18.316 -05:00'
同様に、リテラル内でタイムゾーンオフセットの代わりにタイムゾーンエリア名を使用することもできます。以下の例では、-08:00 を America/Los_Angeles に置き換えています:
TIMESTAMP '2020-02-01 11:00:00 America/Los_Angeles'
一部の地域では夏時間が適用されるため、夏時間の切り替え時に生じる時間の曖昧さを解消するために、リテラルの値を指定する際には、タイムゾーンエリア名(TZR)と対応する略称(TZD)を併用することで、リテラルの値が夏時間であることを確認できます:
TIMESTAMP '2020-06-01 11:00:00 America/Los_Angeles PDT'
TIMESTAMP WITH LOCAL TIME ZONEリテラル
TIMESTAMP [(scale)] WITH LOCAL TIME ZONE データ型は、現地タイムゾーン情報を含むデータ型です。OceanBaseデータベースには専用のTIMESTAMP WITH LOCAL TIME ZONEリテラルは存在せず、他の有効な日付時刻リテラルを使用して TIMESTAMP [(scale)] WITH LOCAL TIME ZONE データ型に値を代入します。以下の表は、TIMESTAMP WITH LOCAL TIME ZONE列に値を挿入するために使用できる形式、およびクエリが返す対応する値を示しています:
INSERTステートメントで指定された値 |
クエリで返される値 |
|---|---|
| '25-FEB-20' | 25-FEB-20 00.00.000000 |
| SYSTIMESTAMP | 25-FEB-20 14:28:41.264258 |
| TO_TIMESTAMP('25-FEB-2020', 'DD-MON-YYYY') | 25-FEB-20 00.00.000000 |
| SYSDATE | 25-FEB-20 02.55.29.000000 PM |
| TO_DATE('25-FEB-20', 'DD-MON-YYYY') | 25-FEB-20 12.00.00.000000 AM |
| TIMESTAMP'2020-02-25 8:00:00 America/Los_Angeles' | 25-FEB-20 08.00.00.000000 AM |