2017-09-20 14 views
0

日付範囲の行を、その日付範囲内のすべての日に複数の行に分割する必要があるシナリオがあります。 Informatica powercenterでこのシナリオでターゲットを取得する方法を知っている人はいますか?開始日と終了日の範囲内の各日付に分割する範囲

SOURCE

code  start date   end date 
ADMISSION 01/01/2017 02:05:11 01/01/2017 04:20:53 
TRANSFER 01/01/2017 04:20:54 01/03/2017 18:30:48 
DISCHARGE 01/03/2017 18:30:49 01/03/2017 20:18:11 

TARGET

code  start date   end date 
ADMISSION 01/01/2017 02:05:11 01/01/2017 04:20:53 
TRANSFER 01/01/2017 04:20:54 01/01/2017 11:59:59 
TRANSFER 01/02/2017 00:00:00 01/02/2017 11:59:59 
TRANSFER 01/03/2017 00:00:00 01/03/2017 18:30:48 
DISCHARGE 01/03/2017 18:30:49 01/03/2017 20:18:11 

は、事前にありがとうございます!

+0

ありがとうございました!新しい日付列を作成し、開始日と終了日の各日付に行を追加するソース修飾子にSQLを追加しました。新しい行には開始日と終了日時が実際の開始日と終了日として設定されていたため、新しい日付列と比較して日付を調整し、開始日が00:00:00で連結される式を追加して、 :59:ここで新しい日付 – Subas

+0

と等しくない終了日のための59のSQクエリがあります:tmpに DTから ( 選択キャストとしてTMP(DT)と( '20141001' 組合)日時など、すべての 選択DT + 1 <日付としてDT GETDATE() ) セレクトキャスト()NEW_DATE、A.code、A.start_date、TMPからA.end_date 、例えば キャスト(DT日付など)>として= CAST(A.start_date日付)とキャスト(日付としてのdt)<=キャスト(A.end_date a日付) オプション(maxrecursion 0) – Subas

答えて

0

最も簡単なのは、日付レコードの日が開始日の日以上で終了以下であるために、各レコード(ソース修飾子のSQL結合)に対して結合する日付の表を持つことです日付の日。後でマッピングで余分なロジックを追加して、開始時刻フィールドから開始時刻を選択してください。そうでない場合はdatetablestarttimeと同じで終わり時刻は同じです。

0

Java変換で試してみてください! 開始日と終了日の差を確認する Javaトランスフォーメーションでrowgenを使用して新しいレコードを作成します。 これはあなたの質問にお答えします。

0

PowerCenterで行の乗算をネイティブにサポートしていません。したがって、回避策が必要です。日付の差異を計算し、それを使用して行を掛けます。オプションは次のとおりです。[...、1,2,2,3,3,3]のようなデータを持つダミーのテーブルを作成し、それを使用して余分な行(here's an example

  • を生成する

    • 使用するJava変換日付差に参加する。行数が高速になり、大量にはお勧めできません。
    • 与えられた入力に対して適切な行数を返すアクティブな非キャッシュ参照を作成します。あなたがmyNumber列タイプBIGINTでmyNumbersテーブルを作成し、1からXまでのシーケンスで一度それを移入仮定*

    *各処理された行の行の必要な数を取得するSQLクエリオーバーライドを使用して、あなたが使用することができます検索の上書きのクエリ:SELECT 1 FROM myNumbers WHERE myNumber = ?in_lookup_port_name?。条件として値1のダミーポートを使用してください。