Можно ли построить дату вне календарной недели плюс год в oracle? - PullRequest
0 голосов
/ 23 января 2020

У меня есть столбец, содержащий календарные недели плюс год в виде строки, которая была построена следующим образом:

select TO_CHAR(TO_DATE('01.03.2020'),'WW/YYYY') from DUAL

, что приводит к строке типа

09/2020

Можно ли восстановить дату по этой строке? Мне было бы все равно, является ли дата началом недели, концом недели или чем-то еще в течение этой недели.

Ответы [ 2 ]

3 голосов
/ 23 января 2020

Код формата WW подсчитывает 7-дневные периоды, начинающиеся с 1 января, поэтому просто выберите 1 января для своего года и добавьте правильное количество 7-дневных периодов:

Oracle Настройка :

CREATE TABLE table_name ( value ) AS
  SELECT TO_CHAR( DATE '2020-03-01', 'WW/YYYY' ) FROM DUAL;

Запрос :

SELECT TO_DATE( SUBSTR( value, 4 ), 'YYYY' ) + ( SUBSTR( value, 1, 2 ) - 1 ) * 7
         AS first_day_of_week,
       TO_DATE( SUBSTR( value, 4 ), 'YYYY' ) + ( SUBSTR( value, 1, 2 ) ) * 7 - 1
         AS last_day_of_week
FROM   table_name

Вывод :

FIRST_DAY_OF_WEEK | LAST_DAY_OF_WEEK
:---------------- | :---------------
2020-02-26        | 2020-03-03      

дБ <> скрипка здесь

0 голосов
/ 23 января 2020

Что-то вроде этого?

with test (col) as
  (select '09/2020' from dual),
-- construct the whole year with week markers 
whole_year as
  (select to_date(substr(col, -4), 'yyyy') + level - 1 datum,
          --
          to_char(to_date(substr(col, -4), 'yyyy') + level - 1, 'ww') week
   from test
   connect by level <= add_months(to_date(substr(col, -4), 'yyyy'), 12) -
                                  to_date(substr(col, -4), 'yyyy')
  )
select min(datum)
from whole_year
where week = '09'; 

whole_year CTE - для недели 09 - выглядит так:

DATUM      WE
---------- --
25.02.2020 08
26.02.2020 09        --> this
27.02.2020 09
28.02.2020 09
29.02.2020 09
01.03.2020 09
02.03.2020 09
03.03.2020 09
04.03.2020 10
05.03.2020 10
06.03.2020 10

, что означает, что запрос, который я разместил выше, в результате , возвращает

 <snip>
 12  select min(datum)
 13  from whole_year
 14  where week = '09';

MIN(DATUM)
----------
26.02.2020

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...