I'm trying to calculate the date for a corresponding week-of-year one year ago. It seems to be working now but one thing botters me that initially lead to a couple of errors that I fixed by experimenting with various methods.
The issue is that when I don't use to_number with &weekOfYearNow - &weekOfYearThen and use this result to calculate the lastYearFixed then the result will be -311 instead of 7. Why is this so? Aren't that two variables (weekOfYearNow & weekOfYearThen) already numbers?
define today = to_date('30/12/20', 'dd/mm/yy');
define lastYear = add_months(&today, -12);
select &today as "Today" from sys.dual;
select &lastYear as "LastYear" from sys.dual;
define weekOfYearNow = to_number(to_char(&today, 'ww'));
define weekOfYearThen = to_number(to_char(&lastYear, 'ww'));
define weekOfYearOffset = to_number(&weekOfYearNow - &weekOfYearThen); -- <-- must use to_number - but why?
define lastYearFixed = &lastYear + (&weekOfYearOffset * 7); -- <-- this equals -311 if I don't call to_number above
define monday = add_months(sysdate - 7 - to_char(sysdate, 'd') + 2, -12);
define sunday = add_months(sysdate - 7 + to_char(sysdate, 'd'), -12);
select &weekOfYearNow as "WeekOfYearNow" from sys.dual;
select &weekOfYearThen as "WeekOfYearThen" from sys.dual;
select &weekOfYearOffset as "WeekOfYearOffset" from sys.dual;
select &lastYearFixed as "LastYearFixed" from sys.dual;