一尘不染

Oracle 11g-仅将工作日插入表中的FOR循环?

sql

我想将一些数据插入与下一年的日期相关的表中。我实际上只需要插入工作日。

 BEGIN
  FOR i IN 1..365 LOOP
  INSERT INTO MY_TABLE (ID, MY_DATE)
  VALUES (i, (to_date(sysdate,'DD-MON-YY')-1)+i);
  END LOOP;
 END;

我可以通过回退并删除周末的行来解决我的问题,但这似乎不太优雅-有人能想到一种方法来修改我的循环以便跳过周末吗?


阅读 148

收藏
2021-03-08

共1个答案

一尘不染

您总是可以在插入行之前检查星期几(星期几的名称取决于您的NLS设置,因此这不是最可靠的解决方案)

 BEGIN
  FOR i IN 1..365 LOOP
    IF( to_char(sysdate-1+i,'fmDAY') NOT IN ('SATURDAY', 'SUNDAY') )
    THEN
      INSERT INTO MY_TABLE (ID, MY_DATE)
        VALUES (i, (to_date(sysdate,'DD-MON-YY')-1)+i);
    END IF;
  END LOOP;
 END;
2021-03-08