获取特定年份和月份的星期数

时间:2019-07-24 10:38:07

标签: sql oracle oracle11g

在Oracle SQL中,我想获取特定月份和年份的周数。例如:输入将以2019年为第8年,即其中的5周。

PROCEDURE SP_WEEKS(P_REFCURSOR OUT SYS_REFCURSOR,P_YEAR IN NUMBER:=-1,P_MONTH IN NUMBER:=-1)  IS
  BEGIN
       OPEN P_REFCURSOR FOR

       --here will return table
  END SP_WEEKS

结果将是

ID  NAME
--  ----
1     1
2     2
3     3
4     4
5     5

IDNAME是星期数。我该怎么写?

预先感谢

1 个答案:

答案 0 :(得分:1)

如果我很了解您的需求,您可以尝试:

CREATE OR REPLACE PROCEDURE SP_WEEKS(P_REFCURSOR OUT SYS_REFCURSOR,P_YEAR IN NUMBER:=-1,P_MONTH IN NUMBER:=-1)  IS
BEGIN
     OPEN P_REFCURSOR FOR
     select level as ID, level as NAME
      from dual
      connect by add_months( date '0001-01-01', 12*P_YEAR + P_MONTH -1) + (level -1)*7
              <= last_day(add_months( date '0001-01-01', 12*P_YEAR + P_MONTH -1));
END SP_WEEKS;

例如:

SQL> var result refcursor
SQL> begin
  2    SP_WEEKS(:result, 2019, 8);
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> print :result

        ID       NAME
---------- ----------
         1          1
         2          2
         3          3
         4          4
         5          5

这使用一种常用的技术来生成行,方法是从给定月份的第一天开始,每次迭代增加7天(LEVEL);如果结果日期不在月份中,则CONNECT BY条件将停止迭代。