2012-06-03 26 views
-1

我真的被困在這裏。PL/SQL在表中找到日期

例如past_data表。

name|date  |hour |data 
____________________________________________________________ 
je |06/05/2012|1  |32323 
je |06/05/2012|2  |43564 
je |20/05/2102|3  |12334 
je |06/05/2012|4  |123123 
je |13/05/2012|1  |133223 

NEW_TABLE

name|date  |hour |data 
____________________________________________________________ 
je |06/05/2012|1  |32323 
je |06/05/2012|2  |43564 
je |20/05/2102|3  |12334 
je |06/05/2012|4  |123123 

我怎樣寫一個程序,找出了一整天匹配當前日(今天是星期天)從列「日期」表「past_date」複製到talbe「NEW_TABLE」。在該示例中,您可以看到date = 06/05/2012和20/05/2012 from past_date表中的行被複制到new_table,因爲這兩個日期是星期日。

然後循環此過程13次(總共數週),每次增加1天,例如星期日然後星期一然後星期二等。

請幫忙。

+0

爲什麼13次?本週只有7天...更多的是,它會複製所有記錄 - 因爲每個記錄都是迭代中的一天... –

+0

那麼我如何循環2周?目前運行需要2周。 – user1332821

+1

當你在答案中運行givven語句時,如果你迭代它,你可以複製** all **每週特定日期的past_data記錄(在我的答案 - 今天,@Klas答案 - 星期日)在整整一個星期,然後你複製temp_data的所有記錄 –

回答

1

你不需要PLSQL爲此,
試試這個:

INSERT INTO new_table (name, date, hour, data) 
    SELECT name, date, hour, data 
    FROM past_data 
    WHERE to_char(sysdate, 'd') = to_char(date, 'd') 

更新:我真的不明白,爲什麼又是什麼好,但既然你問...

如果使用PLSQL那麼你可以做:

BEGIN 
    FOR i IN 0 .. 12 LOOP 
    INSERT INTO new_table (name, date, hour, data) 
     SELECT name, date, hour, data 
     FROM past_data 
     WHERE to_char(sysdate + i, 'd') = to_char(date, 'd'); 
    END LOOP; 
END; 
+1

括號'('..')'在SELECT部分​​無效 –

+0

@a_horse_with_no_name,我同意他們是**不需要的**但是您確定他們是**無效**嗎? (我不介意刪除它們,我只是覺得它更易讀(它讓我想起'values'子句)) –

+0

嗯。我可以發誓他們會拋出一個錯誤,但顯然他們不會。 –

0

得到某一天的某一天的格式說明符是'D':

INSERT INTO new_table (name, date, hour, data) 
    SELECT name, date, hour, data 
    FROM past_data 
    WHERE to_char(date, 'D') = 1 
+0

括號在選擇部分 –

+0

附近無效我已將它們刪除。 –

+0

謝謝你們的回覆,這是一個兩部分的問題,但我被要求削減以模擬條款。我如何循環播放13次以上,並且每次都增加當前日期?請參閱編輯的問題。 – user1332821