TO_UTC_TIMESTAMP_TZ

目的

SQLファンクションTO_UTC_TIMESTAMP_TZは、varchar入力としてISO 8601の日付フォーマット文字列を受け取り、SQLデータ型TIMESTAMP WITH TIMEZONEのインスタンスを戻します。入力はUTC時間(協定世界時、以前はグリニッジ標準時)に正規化されます。SQLファンクションTO_TIMESTAMP_TZとは異なり、新しいファンクションでは入力文字列がISO 8601日付形式を使用して、タイムゾーンをUTC 0にデフォルト設定すると想定しています。

このファンクションの一般的な使用方法として、SQLファンクションSYS_EXTRACT_UTCにその出力を提供し、UTC時間を取得してこれをSQLバインド変数としてSQL/JSON条件JSON_EXISTSに渡し、タイムスタンプ範囲の比較を実行します。

これは、日付と時刻に許可されている構文です。

  • 日付(のみ):YYYY-MM-DD

  • 日時: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

説明:

  • YYYYを4桁の10進数で指定します。

  • MMを2桁の10進数の00から12で指定します。

  • DDを2桁の10進数の00から31で指定します。

  • hhを2桁の10進数の00から23で指定します。

  • mmを2桁の10進数の00から59で指定します。

  • ss[.s[s[s[s[s]]]]]を2桁の10進数の00から59で、必要に応じて小数点と1桁から6桁の10進数(秒の小数部を表す)を続けて指定します。

  • ZUTC時間(タイムゾーン0)を指定します。(+00:00で指定することもできますが、–00:00で指定することはできません。)

  • (+|-)hh:mmはタイムゾーンをUTCとの差として指定します。(+またはのいずれか1つを指定する必要があります。)

時間値の場合、タイムゾーン部分はオプションです。これが指定されていない場合、UTC時間が仮定されます。

他のISO 8601日時構文はサポートされていません。具体的には、次のとおりです。

  • ハイフンで始まるマイナスの日付(BCE 1年より前の日付) (たとえば2018–10–26T21:32:52)はサポートされていません。

  • ハイフンおよびコロン区切文字を入力する必要があります。いわゆる「基本」形式のYYYYMMDDThhmmssはサポートされていません。

  • 序数日(年+通日、暦週+日数)はサポートされていません。

  • 4桁より大きい年の使用はサポートされていません。

サポートされている日付と時刻は次のとおりです。

  • 2018–10–26T21:32:52

  • 2018-10-26T21:32:52+02:00

  • 2018-10-26T19:32:52Z

  • 2018-10-26T19:32:52+00:00

  • 2018-10-26T21:32:52.12679

サポートされていない日付と時刻は次のとおりです。

  • 2018-10-26T21:32 (時刻が指定されている場合は、そのすべての部分が存在する必要があります)

  • 2018-10-26T25:32:52+02:00 (時の部分が25で、範囲外です)

  • 18-10-26T21:32 (年が完全に指定されていません)

SELECT TO_UTC_TIMESTAMP_TZ('1998-01-01') FROM DUAL;

TO_UTC_TIMESTAMP_TZ('1998-01-01')
---------------------------------------------------------------------------
01-JAN-98 12.00.00.000000000 AM +00:00
SELECT TO_UTC_TIMESTAMP_TZ('2000-01-02T12:34:56.789') FROM DUAL;

TO_UTC_TIMESTAMP_TZ('2000-01-02T12:34:56.789')
---------------------------------------------------------------------------
02-JAN-00 12.34.56.789000000 PM +00:00
SELECT TO_UTC_TIMESTAMP_TZ('2016-05-05T00:00:00.000Z') FROM DUAL;

TO_UTC_TIMESTAMP_TZ('2016-05-05T00:00:00.000Z')
---------------------------------------------------------------------------
05-MAY-16 12.00.00.000000000 AM +00:00
SELECT TO_UTC_TIMESTAMP_TZ('2016-05-05T02:04:35.4678Z') FROM DUAL;

TO_UTC_TIMESTAMP_TZ('2016-05-05T02:04:35.4678Z')
---------------------------------------------------------------------------
05-MAY-16 02.04.35.467800000 AM +00:00