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'
2つの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 |