Как указать условие - старше чем заданная в переменной дата?
Делаю отчет через FastReport и подключаюсь для вывода данных к БД.
Формат даты переменной:
+RepSqlText.ToSqlDate(sLastDate)+ = 2012-09-05 14:29:57
Сам запрос даёт ошибку:
logi.EVENTTIME < to_date('(+RepSqlText.ToSqlDate(sLastDate)+)-90')
Как будет правильнее всего сделать?
То есть, мне надо чтобы EVENTTIME был старше чем sLastDate как минимум на 90 дней.
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Рассмотрим это утверждение в вопросе:
+RepSqlText.ToSqlDate(sLastDate)+ = 2012-09-05 14:29:57
RepSqlText.ToSqlDate(sLastDate) это не переменная, это функция, которая возвращает символьное значение 2012-09-05 14:29:57 как результат выполнения. Этот результат с двух сторон имеет оператор конкатинации + для слияния с текстом запроса.
То есть, просто заменим выражение +RepSqlText.ToSqlDate(sLastDate)+ его результатом и сравним - ошибочный запрос с правильным:
create table logi (eventtime) as
select add_months (date'2012-09-05', -3)+9 from dual union all
select add_months (date'2012-09-05', -3)-1 from dual union all
select add_months (date'2012-09-05', -3)-2 from dual
/
select logi.eventtime
from logi
where logi.EVENTTIME < to_date('(2012-09-05 14:29:57)-90')
/ --^^^^^^^^^^^^^^^^^^^^^^^^
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
select logi.eventtime
from logi
where logi.EVENTTIME < to_date('2012-09-05 14:29:57', 'yyyy-mm-dd hh24:mi:ss')-90
/
EVENTTIME
-------------------
2012-06-04 00:00:00
2012-06-03 00:00:00