3.12 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
で指定された入力を提供する数値または文字のソース列の名前。
表3-1 日付ディスクリプタ
ディスクリプタ | 説明 | 適用対象 |
---|---|---|
CC |
100年 |
入力/出力 |
YY |
西暦の下2桁 |
入力/出力 |
YYYY |
4桁の西暦 |
入力/出力 |
MM |
数字の月 |
入力/出力 |
MMM |
英語の月( |
入力/出力 |
DD |
月単位の日付 |
入力/出力 |
DDD |
年単位の日付( |
入力/出力 |
DOW0 |
数値で表す曜日(Sunday = |
入力/出力 |
DOW1 |
数値で表す曜日(Sunday = |
入力/出力 |
DOWA |
英語で表す曜日( |
入力/出力 |
HH |
時間 |
入力/出力 |
MI |
分 |
入力/出力 |
SS |
秒 |
入力/出力 |
JTSLCT |
すでにローカル時間のユリウス・タイムスタンプに対して、またはユリウス・タイムスタンプに変換するときにローカル時間を保持するために使用します。 |
入力/出力 |
JTSGMT |
ユリウス・タイムスタンプ( |
入力/出力 |
JTS |
ユリウス・タイムスタンプ。 |
入力/出力 |
JUL |
ユリウス日。 |
入力/出力 |
TTS |
NonStopの48ビット・タイムスタンプ |
入力 |
PHAMIS |
|
入力 |
FFFFFF |
端数(マイクロ秒まで) |
入力/出力 |
STRATUS |
|
入力/出力 |
CDATE |
エポック以降のCタイムスタンプ(秒) |
入力/出力 |
例
- 例1
-
下2桁の西暦が提供されているインスタンスで、出力で4桁の西暦が必要な場合には、複数のオプションを使用して正しい100年を取得できます。
-
100年を次のようにハードコードできます。
'CC', 19 or 'CC', 20
-
@IF
ファンクションを使用して、次のように条件を設定できます。'CC', @IF (YY > 70, 19, 20)
これにより、下2桁の西暦が70より大きい場合に、100年を19に設定し、それ以外の場合は20に設定できます。
-
システムは100年を自動的に計算できます。下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
-
次の例では、受注が処理された時間を生成します。内部の
@DATE
式は、order_taken
列をユリウス・タイムスタンプに変更した後、マイクロ秒に変換されたorder_minutes
列をこのタイムスタンプに追加します。この式は、新しいユリウス・タイムスタンプとして外部@DATE
式に戻され、読みやすい日付と時間に再度変換されます。order_filled = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', @DATE ('JTS', 'YYMMDDHHMISS', order_taken) + order_minutes * 60 * 1000000)
- 例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 ) ) ) ;
親トピック: 列変換ファンクション