хочу вычесть две даты из двух разных таблиц, получая синтаксическую ошибку - PullRequest
0 голосов
/ 29 апреля 2019
select to_date(to_char(MIN (logical_date), 'YYYYMMDD'), 'YYYYMMDD')from table_1 
     - to_date(to_char(MIN (due_date) ,'YYYYMMDD'),'YYYYMMDD') FROM table_2

1 Ответ

2 голосов
/ 29 апреля 2019

Вы можете вычесть результаты двух подзапросов, каждый из которых получает минимальную дату из одной из таблиц; при общем выполнении запроса к dual (встроенная однострочная таблица, которая весьма полезна для такого рода вещей):

-- CTEs for your sample data
with table_1 (logical_date) as (select date '2019-05-01' from dual),
  table_2 (due_date) as (select date '2019-05-15' from dual)
-- actual query
select (select to_date(to_char(min(logical_date), 'YYYYMMDD'), 'YYYYMMDD') from table_1)
  - (select to_date(to_char(min(due_date) ,'YYYYMMDD'),'YYYYMMDD') from table_2)
  as diff
from dual;

      DIFF
----------
       -14

Но вам не нужно конвертировать в и из строк, вы можете просто сделать:

select (select min(logical_date) from table_1) - (select min(due_date) from table_2) as diff
from dual;

если в ваших датах нет компонентов, не относящихся к полуночи, в этом случае вы получите дробное число дней в вашем результате; чтобы получить только целые дни, либо округлите / усечите / пол / выведите результат, либо используйте trunc(), чтобы установить оба компонента времени в полночь, прежде чем вычесть, что зависит от того, как вы хотите обработать эти дробные дни.

Если вы ожидаете, что эта разница будет -15, то вычтите одно из результата. Если вы ожидаете положительное значение, измените порядок подзапросов и добавьте вместо него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...