Могу я предложить что-то подобное вместо этого?
TIME_P >= DATE '2009-01-01' AND
TIME_P < (CASE WHEN NOW = '2010-01-01' THEN DATE '2010-01-01' ELSE SYSDATE END)
Здесь используются литералы даты, case
вместо decode()
(case
стандартно SQL). Начальная trunc()
тоже избыточна.
Вторая строка для меня не имеет смысла. Если вам просто нужны даты, которых нет в будущем, тогда:
TIME_P >= DATE '2009-01-01' AND
TIME_P < sysdate
Или, если вы хотите передать параметр и использовать его вместо sysdate:
TIME_P >= DATE '2009-01-01' AND
TIME_P < COALESCE(:parameter, sysdate)