Как вернуть результаты 7 дней в течение недели - PullRequest
0 голосов
/ 05 июля 2018

Моя неделя начинается в субботу и заканчивается в пятницу. например: 6-30-2018 был мой первый день в неделе, а 6 июля - последний день.

select trunc(sysdate,'IW') + Level -  (1+ trunc(sysdate) - trunc(sysdate, 'IW')) 
from dual connect by level < 8; 

результаты продолжают двигаться, когда я запускаю над запросом в течение недели. Мне нужно, чтобы он оставался прежним.

5 июля возвращается ниже. 4 июля он дал разные результаты. Он перемещается вокруг системной даты, поскольку меняется день ото дня.

TRUNC(SYSDATE,'IW')+LEVEL-(1+TRUNC(SYSDATE)-TRUNC(SYSDATE,'IW'))
29-JUN-2018 00:00:00 
30-JUN-2018 00:00:00 
01-JUL-2018 00:00:00
02-JUL-2018 00:00:00 
03-JUL-2018 00:00:00 
04-JUL-2018 00:00:00
05-JUL-2018 00:00:00

SELECT TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW') + Level - (1+ TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW') - TRUNC(to_date('08-Jul-2018', 'dd-Mon-yyyy'), 'IW'))
FROM dual
CONNECT BY level <= 8; --great

Если я жестко закодирую это, результаты останутся прежними. Есть ли способ, которым мне не нужно жестко кодировать дату, хотя она, кажется, работает.

спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Это не элегантно, но, кажется, дает то, что вы ищете:

 WITH "Week Spans" AS
        (
        SELECT
               NEXT_DAY(TRUNC(SYSDATE,'YY')-1,'Saturday') + ((LEVEL - 1) * 7) + 00  AS "Saturday"
              ,NEXT_DAY(TRUNC(SYSDATE,'YY')-1,'Saturday') + ((LEVEL - 1) * 7) + 07 - (1 / (24*60*60))  AS "Following Friday"
        FROM dual
        CONNECT BY LEVEL < 53
        )
  SELECT
        (
        SELECT "Saturday" 
        FROM "Week Spans"
        WHERE SYSDATE BETWEEN "Saturday" AND "Following Friday"
        ) + (LEVEL - 1) AS "Week Day"
  FROM dual
  CONNECT BY LEVEL < 8
  ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...