Похоже, вы пытаетесь преобразовать строку ".PENDING_DATE_CUTOFF."
в дату. Я просто сделал следующее и получил ту же ошибку:
SELECT TO_DATE('".PENDING_DATE_CUTOFF."', 'YYYY-MM-DD') FROM dual;
Является ли .PENDING_DATE_CUTOFF.
(с точками) именем столбца в вашей таблице? Если это так, пропустите символы одинарных кавычек, например ::10000
SELECT TO_DATE(".PENDING_DATE_CUTOFF.", 'YYYY-MM-DD') FROM dual;
Конечно, это даст совсем другую ошибку [ORA-00904: ".PENDING_DATE_CUTOFF.": invalid identifier
], если вы запустите как есть! Поэтому я думаю, что вам может понадобиться что-то вроде следующего (я предполагаю, что другие столбцы даты являются фактическими датами, а обрезанные столбцы - это VARCHAR2
столбцы, в которых хранятся даты в формате YYYY-MM-DD
:
SELECT CASE WHEN COALESCE(uap.us_pend_dt, act_d_dt) >= TO_DATE(".PENDING_DATE_CUTOFF.", 'YYYY-MM-DD') THEN COALESCE(uap.us_pend_dt, act_d_dt)
ELSE WHEN COALESCE(act_d_dt, SYSDATE) < (TO_DATE(".HIRE_DATE_CUTOFF.", 'YYYY-MM-DD') THEN act_d_dt
ELSE act_d_dt
END AS h_dT
FROM mytable;
Обратите внимание, что я также избавился от постороннего оператора CASE
и преобразовал специфическую для Oracle функцию NVL()
в стандартную ANSI COALESCE()
функцию.
РЕДАКТИРОВАТЬ: В случае, если ваши *_dt
столбцы являются строками, а не датами, лучше всего конвертировать их в даты, используя TO_DATE()
до сравнения - таким образом, вы сравнение дат с датами.
Надеюсь, это поможет.