【发布时间】:2021-02-17 15:26:49
【问题描述】:
我正在尝试计算一年前相应一周的日期。它现在似乎可以工作了,但有一件事让我很困扰,它最初导致了几个错误,我通过尝试各种方法修复了这些错误。
问题是当我不使用to_number 和&weekOfYearNow - &weekOfYearThen 并使用此结果计算lastYearFixed 时,结果将是-311 而不是7。为什么会这样?那两个变量(weekOfYearNow & weekOfYearThen)不是已经是数字了吗?
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;
【问题讨论】:
标签: sql oracle oracle-sqldeveloper operator-precedence