就在一月份没有工作

时间:2017-11-07 15:40:57

标签: oracle date oracle11g

在这个查询中,我发现了一个月的星期,例如11月从星期三开始,到星期日5结束。 这是11月的第一周。

SELECT * FROM (
 WITH days AS
  (SELECT to_date('01012017','ddmmyyyy') + level-1 date_in
 FROM  dual
  CONNECT BY level < 32)
 SELECT date_in,
  TO_CHAR(date_in,'IW') - TO_CHAR(TRUNC(date_in,'MM'),'IW') + 1 week_number
 FROM  days) where week_number = 1; 

week_number可能会根据一个月的星期而变化,但是1月份不起作用。

2 个答案:

答案 0 :(得分:0)

您的要求对我来说并不清楚,但也许您正在寻找这个:

SELECT TRUNC (next_day(TRUNC(TO_DATE('20022017','ddmmyyyy'), 'mm'),'monday') - 1), 'IW') AS first_week
FROM dual;

答案 1 :(得分:0)

我仍然不清楚你在寻找什么,但也许以下查询将帮助你的方式:

WITH YEAR_START AS (SELECT TO_DATE('01012017', 'DDMMYYYY') AS FIRST_DAY_OF_YEAR
                      FROM DUAL),
     MONTH_START AS (SELECT FIRST_DAY_OF_YEAR AS FIRST_DAY_OF_MONTH
                       FROM YEAR_START
                     UNION ALL
                     SELECT ADD_MONTHS(FIRST_DAY_OF_YEAR, LEVEL) AS FIRST_DAY_OF_MONTH
                       FROM YEAR_START
                       CONNECT BY LEVEL <= 11),
     MONTH_START_AND_END AS (SELECT FIRST_DAY_OF_MONTH,
                                    ADD_MONTHS(FIRST_DAY_OF_MONTH, 1) - INTERVAL '1' DAY AS LAST_DAY_OF_MONTH
                               FROM MONTH_START),
     ABS_MONTH_WEEKS AS (SELECT FIRST_DAY_OF_MONTH,
                                LAST_DAY_OF_MONTH,
                                TO_NUMBER(TO_CHAR(FIRST_DAY_OF_MONTH, 'IW')) AS ABS_FIRST_WEEK_OF_MONTH,
                                TO_NUMBER(TO_CHAR(LAST_DAY_OF_MONTH, 'IW')) AS ABS_LAST_WEEK_OF_MONTH
                           FROM MONTH_START_AND_END),
     REL_MONTH_WEEKS AS (SELECT a.*,
                                1 AS REL_FIRST_WEEK_OF_MONTH,
                                ABS_LAST_WEEK_OF_MONTH - CASE
                                                           WHEN ABS_FIRST_WEEK_OF_MONTH > ABS_LAST_WEEK_OF_MONTH THEN 0
                                                           ELSE ABS_FIRST_WEEK_OF_MONTH-1
                                                         END AS REL_LAST_WEEK_OF_MONTH
                           FROM ABS_MONTH_WEEKS a)
SELECT *
  FROM REL_MONTH_WEEKS;

祝你好运。