2015-02-06 4 views
1

Учитывая, что поле в Oracle, которое содержит даты, как бы вы подсчитали, какая дата окончания недели использует Sun thru Sat как ваша неделя. Например, если дата равна 1/26/2015 (это понедельник), запрос должен вернуться в 1/31/2015 (это суббота. Если дата равна 1/31/2015, тогда запрос должен вернуть 1 ./31/2015Рассчитайте дату окончания недели в оракуле, используя субботу в качестве даты окончания недели

ответ

3

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

TRUNC(whatever_time,'DAY') 

Таким образом, вы можете делать такие вещи, как это:.

SELECT TRUNC(whatever_time,'DAY') week_starting, 
     TRUNC(whatever_time,'DAY') + 6 week_ending, 
     SUM(sales) 
    FROM table 
    GROUP BY TRUNC(whatever_time,'DAY') 

и вы получите то, что вам нужно.

Обратите внимание, что TRUNC(whatever_time,'DAY') отличит параметр инициализации сеанса Oracle под названием «NLS_TERRITORY». Например, в Европе понедельник считается первым рабочим днем ​​недели. Попробуй это.

ALTER SESSION SET NLS_TERRITORY=GERMANY; 
SELECT TRUNC(DATE '2013-12-31', 'DAY'), 
     TRUNC(DATE '2014-01-03', 'DAY') 
    FROM DUAL; 

Полная рецензия этого здесь: http://www.plumislandmedia.net/sql-time-processing/using-sql-report-time-intervals-oracle/

+0

Отлично ... спасибо. Это именно то, что мне нужно! – Bob