Переменная замены _DATE
- это строка, которая отслеживает ваш NLS_DATE_FORMAT:
show defines
DEFINE _DATE = "2018-10-31" (CHAR)
Вы пытаетесь вычесть число из строки; за исключением того, что вы даже не делаете этого на самом деле, потому что внутри двойных кавычек все равно не будет вычислений.
Это немного неопрятно, но вы можете добиться эффекта, который, на мой взгляд, достигается после использования нескольких переменных подстановки и синтаксиса column ... new_value ...
, поддерживаемого SQL Developer, с запросом для установки этих значений - которые вы можете скрыть с помощью set termout off
( по крайней мере, в последних версиях):
column date_0 new_value date_0
column date_1 new_value date_1
column date_2 new_value date_2
-- ...
set termout off
select to_char(sysdate, 'YYYY-MM-DD') as date_0,
to_char(sysdate - 1, 'YYYY-MM-DD') as date_1
-- ...
from dual;
set termout on
set verify off
select
sysdate,
SYSDATE "&date_0",
(sysdate-1) "&date_1"
from
dual;
SYSDATE 2018-10-31 2018-10-30
---------- ---------- ----------
2018-10-31 2018-10-31 2018-10-30
Однако вам нужно поместить всю вещь или, по крайней мере, «скрытую» часть, в файл, а затем запустить его с @file.sql
, так как termout
не учитывается для операторов, запускаемых непосредственно с рабочего листа. В качестве альтернативы вы можете добавить noprint
к определениям столбцов, что также скрывает их, но при этом дать дополнительные пустые строки в выводе.
Вы также можете использовать эти переменные подстановки для изменения форматирования столбца, если вам необходимо, например, с выбранными более короткими фиктивными значениями:
column master_column format a20
column &date_0 format A10
column &date_1 format A15
select
'a' as master_column,
'b' as "&date_0",
'c' as "&date_1"
from
dual;
MASTER_COLUMN 2018-10-31 2018-10-30
-------------------- ---------- ---------------
a b c
Обратите внимание, что в предложениях column &date_0 ...
и т. Д. Имена переменных не следует заключать в двойные кавычки, в отличие от псевдонимов в основном запросе, которые необходимо заключать в кавычки (из-за используемых символов и форматирования псевдонима). имя).
Вы можете расширить этот подход и, возможно, более аккуратно, установив заголовки столбцов таким же образом; так что сам запрос не должен беспокоиться о них:
column master_column format a20
column col2 format A10 heading &date_0
column col3 format A15 heading &date_1
select
'a' as master_column,
'b' as col2,
'c' as col3
from
dual;
MASTER_COLUMN 2018-10-31 2018-10-30
-------------------- ---------- ---------------
a b c