@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'>
ソース入力。有効な値は、日付ディスクリプタおよびオプションのリテラル値(空白やコロンなど)で構成した文字列です日付ディスクリプタは、必要に応じて結合できます。次に例を示します。
-
ディスクリプタ文字列
'YYYYMMDD'は、<source_column>で指定されたソース列に、順番に4桁の西座標(YYYY)、月(MM)および日(DD)が含まれていることを示します。 -
ディスクリプタ文字列
'DD/MM/YY'は、<source_column>で指定されたソース列に、日、スラッシュ、月、スラッシュ、西暦の2桁が含まれていることを示します。
日付の説明は、表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
@IFファンクションを使用して、次のように条件を設定できます。
'CC', @IF (YY > 70, 19, 20)
これにより、下2桁の西暦が70より大きい場合に、100年を19に設定し、それ以外の場合は20に設定できます。
- システムは世紀を自動的に計算できます。下2桁の西暦が50未満の場合、システムは100年を20として算出し、それ以外の場合は100年を19として算出します。
例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 ) )
) ;