@DATE

@DATEファンクションでは、ソース列に渡された形式に基づいて、ターゲット列に様々な形式で日付と時間を返します。@DATEは、実質上すべてのタイプの入力を有効なSQL日付に変換します。@DATEは、日付列の一部の抽出や、日付に基づいた数値タイムスタンプの計算も使用できます。次のファンクションをコールします。

構文

@DATE ('<output_descriptor>', '<input_descriptor>', <source_column>
[, '<input_descriptor>', <source_column>] [, ...])

<'output_descriptor'>

ファンクションの出力。有効な値は、ターゲット列が必要とする日付ディスクリプタおよびオプションのリテラル値(空白やコロンなど)で構成された文字列です。日付ディスクリプタは、必要に応じて結合できます。表3-1の日付ディスクリプタの説明を参照してください。ターゲットの形式ディスクリプタは、date/time/timestamp形式に適合する必要があります。Oracle GoldenGateは、正しい形式にするために、必要に応じて指定された形式を無効にします。

<'input_descriptor'>

ソース入力。有効な値は、日付ディスクリプタおよびオプションのリテラル値(空白やコロンなど)で構成した文字列です日付ディスクリプタは、必要に応じて結合できます。次に例を示します。

日付の説明は、表3-1を参照してください。

<source_column>

<input_descriptor>で指定された入力を提供する数値または文字のソース列の名前。

表1日付ディスクリプタ

記述子 摘要 有効期間...
CC 世紀 入力/出力
YY 2桁の年 入力/出力
`YYYY` 4桁の年 入力/出力
`MM` 数字の月 入力/出力
MMM 英語の月(APR、OCTなど) 入力/出力
`DD` 月単位の日付 入力/出力
DDD 年単位の日付(001、365など) 入力/出力
DOW0 数値で表す曜日(Sunday = 0) 入力/出力
DOW1 数値で表す曜日(Sunday = 1) 入力/出力
DOWA 英語で表す曜日(SUN、MON、TUEなど) 入力/出力
HH 時間 入力/出力
MI 分 入力/出力
`SS` 秒 入力/出力
JTSLCT すでにローカル時間のユリウス・タイムスタンプに対して、またはユリウス・タイムスタンプに変換するときにローカル時間を保持するために使用します。 入力/出力
JTSGMT ユリウス・タイムスタンプ(JTSと同じ)。 入力/出力
`JTS` ユリウス・タイムスタンプ。JULおよびJTSは、数式で使用できる数字を生成します。単位はマイクロ秒です。Windowsマシンでは、Windowsのタイムスタンプの粒度がミリ秒であるため、この値はゼロ(0)で埋められます。 入力/出力
7月 ユリウス日。JULおよびJTSは、数式で使用できる数字を生成します。 入力/出力
TTS NonStopの48ビット・タイムスタンプ 入力
「PHAMIS」 PHAMISアプリケーション日付形式 入力
FFFFFF 端数(マイクロ秒まで) 入力/出力
`STRATUS` STRATUSアプリケーション・タイムスタンプ 入力/出力
日付 エポック以降のCタイムスタンプ(秒) 入力/出力

ISO 8601日時書式のサポート

Oracle GoldenGateは、日付、時刻およびタイムゾーンを表す国際的に認識される形式であるISO 8601をサポートしています。この ISO 8601形式の入出力記述子を次に示します。

表2日付ディスクリプタ

記述子 摘要 有効期間...
ISO8601_DATETIME オプションのタイムゾーンを使用した ISO 8601日時形式。YYYY-MM-DDTHH:MI:SSTZと同等です。 入力/出力
ISO8601_DATETIME_FRACT オプションの小数秒およびオプションのタイムゾーンを使用したISO 8601日時形式。YYYY-MM-DDTHH:MI:SS.FFFFFFTZと同等です。 入力/出力
時間 タイムゾーン指定は、+/-HH:MIまたはリージョンID (America/New_Yorkなど)を受け入れます。 入力/出力

例

例1

2桁の年が提供されているインスタンスでは、出力で4桁の年が必要な場合には、複数のオプションを使用して正しい100年を取得できます。

'CC', 19 or 'CC', 20
'CC', @IF (YY > 70, 19, 20)

これにより、下2桁の西暦が70より大きい場合に、100年を19に設定し、それ以外の場合は20に設定できます。

例2

次の例では、西暦、月、および日列を日付に変換します。

date_col = @DATE ('YYYY-MM-DD', 'YY', date1_yy, 'MM', date1_mm, 'DD', date1_dd)

例3

次の例では、日付と時間を変換し、秒をデフォルトでゼロにします。

date_col = @DATE ('YYYY-MM-DD HH:MI:00', 'YYMMDD', date1, 'HHMI', time1)

例4

次の例では、YYYYMMDDHHMISSとして保持されている数値列をSQL日付に変換します。

datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'YYYYMMDDHHMISS', numeric_date)

例5

次の例では、YYYYMMDDHHMISSとして保持されている数値列をユリウス・タイムスタンプに変換します。

julian_ts_col = @DATE ('JTS', 'YYYYMMDDHHMISS', numeric_date)

例6

次の例では、ユリウス・タイムスタンプ列を2つの異なる列(YYYY-MM-DD HH:MI:SS形式の日付時間列と、タイムスタンプのマイクロ秒部分を保持する端列)に変換します。

datetime_col = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', jts_field), fraction_col = @DATE ('FFFFFF', 'JTS', jts_field)

例7

次の例では、YYYYMMDDHHMISSとして保持されている数値列をISO 8601形式に変換します。

iso_datetime_col = @DATE ('YYYY-MM-DDTHH:MI:SSTZ', 'YYYYMMDDHHMISS', numeric_date)

例 8

次の例では、完全な時間の計算を実行します。ソース日付列(名前dt)に5時間を足して変換された日時が、ターゲット列(名前dt5)に返されます。また、ソース・タイムスタンプ列(名前ts)に5時間を足して変換されたタイムスタンプが、ターゲット列(名前ts5)に返されます。

MAP scratch.t4, TARGET scratch.t4_copy,
COLMAP ( USEDEFAULTS,
dt5 = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS',
@COMPUTE (@DATE ('JTS', 'YYYY-MM-DD HH:MI:SS', dt) + 18000000000 ) ),
ts5 = @DATE ('YYYY-MM-DD HH:MI:SS.FFFFFF', 'JTS',
@COMPUTE ( @DATE ('JTS', 'YYYY-MM-DD HH:MI:SS.FFFFFF', ts) + 18000000000 ) )
) ;