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

英語の月(APROCTなど)

入力/出力

DD

月単位の日付

入力/出力

DDD

年単位の日付(001365など)

入力/出力

DOW0

数値で表す曜日(Sunday = 0)

入力/出力

DOW1

数値で表す曜日(Sunday = 1)

入力/出力

DOWA

英語で表す曜日(SUNMONTUEなど)

入力/出力

HH

時間

入力/出力

MI

入力/出力

SS

入力/出力

JTSLCT

すでにローカル時間のユリウス・タイムスタンプに対して、またはユリウス・タイムスタンプに変換するときにローカル時間を保持するために使用します。

入力/出力

JTSGMT

ユリウス・タイムスタンプ(JTSと同じ)。

入力/出力

JTS

ユリウス・タイムスタンプ。JULおよびJTSは、数式で使用できる数字を生成します。単位はマイクロ秒です。Windowsのタイムスタンプはミリ秒の粒度を使用するので、Windowsマシンでは値にゼロが埋め込まれます。

入力/出力

JUL

ユリウス日。JULおよびJTSは、数式で使用できる数字を生成します。

入力/出力

TTS

NonStopの48ビット・タイムスタンプ

入力

PHAMIS

PHAMISアプリケーション日付形式

入力

FFFFFF

端数(マイクロ秒まで)

入力/出力

STRATUS

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 ) )
) ;