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

And*_*rew 3 sql oracle for-loop date oracle11g

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

 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;
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ave 7

您可以在插入行之前检查一周中的某一天(一周的日期名称将取决于您的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;
Run Code Online (Sandbox Code Playgroud)

  • 我们可以使用''''格式掩码代替.一周中的某一天仍然取决于NLS_TERRITORY(美国的星期日是1,英国的星期日是7),但变化不如天的名字. (2认同)
  • 无论NLS会话设置如何,`to_char(SYSDATE,'fmDAY','nls_date_language =''AMERICAN''')将返回正确的输出* (2认同)