2017-08-30 11 views
0

私はこのような単純なINSERTを有します。しかし、今、私はこの条件以下のtable_1でINSERTを実行する必要があります。INSERT INTOテーブル異なる日付が

  1. .03.2017' '20 g.value場合はを'19 .07.2017' を挿入 - > DD - g.valueから1、ミリメートル - 1から今月。
  2. g.value '20 .07.2017 'の場合、現在の月のg.value、mm-1から'19 .07.2017' - > dd-1を挿入します。
  3. g.value '03 .08.2017 'の場合、現在の月のg.valueから'02 .08.2017' - > dd-1を挿入します。
  4. g.value '03 .03.2017 'の場合、現在の月のg.valueから'02 .08.2017' - > dd-1を挿入します。

結論日は常に-1であり、日は<の場合は-1であり、日が=> 4の場合は現在の月です。書式はdd.mm.yyyyです。

それを行うにはどのように任意のアイデア?

よろしくお願いいたします。

+0

私はカーソルにselectステートメントを配置します。次に、レコードを使用してカーソルをループします。ループするときは、好きなときに挿入して値を変更することができます。 – Tenzin

+0

はCASE文をご覧ください: https://www.techonthenet.com/oracle/functions/case.php –

答えて

1

CASEを使用する必要があります。

INSERT INTO table_1(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    CASE WHEN EXTRACT(day FROM g.value) < 4 THEN -- create the first type of date from g.value 
     ELSE -- create the second type of date from g.value 
    END 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 

またはあなたにもUNION ALL

INSERT INTO table_1(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    -- create the first type of date from g.value 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 
WHERE EXTRACT(day FROM g.value) < 4 
    UNION ALL 
SELECT 'row1', t.value, 
    -- create the second type of date from g.value 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 
WHERE EXTRACT(day FROM g.value) >= 4 
+0

素晴らしい!最初の解決策が私の問題を解決しました。 – MikeL

0

を使用することができます。このソリューションは、私の作品:

INSERT INTO table_1 
(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    CASE WHEN EXTRACT(day FROM g.value) < 4 THEN EXTRACT (day FROM g.value-1) || '.' || EXTRACT (month FROM sysdate) || '.' || EXTRACT (year FROM sysdate) 
    ELSE EXTRACT (day FROM g.value-1) || '.' || EXTRACT (month FROM sysdate-1) || '.' || EXTRACT (year FROM sysdate) END 
FROM temp t, table_2 g 
WHERE t.condition = g.condition 

、BRをあなたのすべてをありがとうございます。

関連する問題