Номер недели Oracle от даты

Я новичок в Oracle. Я понял большую часть того, что мне нужно, но одна область сводит меня с ума. Похоже, все должно быть просто, но я думаю, что мой мозг зажарен, и я просто не могу разобраться с этим. Я пытаюсь подготовить отчет о продажах. Я делаю разные сумасшедшие вещи, основываясь на дате выставления счета. Последнее, что мне нужно сделать, - это создать номер недели, чтобы я мог сообщать о недельных продажах по сравнению с годом. Для целей настоящего отчета мой финансовый год начинается ровно 1 декабря (независимо от дня недели, в который он выпадает) каждый год. Например, 1-7 декабря будет неделя 1 и т. Д. Я могу получить номер недели, используя различные функции, но все они основаны на календарном году или неделях ISO. Как я могу легко создать поле, в котором будет указан номер недели с 1 декабря? Большое спасибо за Вашу помощь.

1 ответ

Решение

Забудьте о стандартных форматах номеров недели, так как они не будут соответствовать этому конкретному требованию. Вероятно, я бы вычел предыдущее 1 декабря из даты выставления счета и разделил бы ее на 7. Округлите, добавьте 1, и все будет в порядке.

select floor(
  (
  trunc(invoiceDate) - 
  case 
  -- if December is current month, than use 1st of this month
  when to_char(invoiceDate, 'MM') = '12' then trunc(invoiceDate, 'MM')
  -- else, use 1st December of previous year
  else add_months(trunc(invoiceDate, 'YYYY'), -1)
  end
  ) / 7
) + 1
from dual;
Другие вопросы по тегам