Проблема с оператором DECODE, который генерирует ошибку 800, проста. '01/01/2009'
рассматривается как строка, и на самом деле это 4-й аргумент, который генерирует ошибку.
Примите во внимание, что входные и выходные данные оператора DECODE могут быть разных типов данных, поэтому движок требует, чтобы вы были более явными в этом случае. (Вы хотите, чтобы purge_date
был приведен как строка или строка '01/01/2009'
, или строковый аргумент был проанализирован как дата или исходная дата? У движка нет способа узнать.
Попробуйте это:
SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)
Вы также можете написать третий аргумент как:
DATE('01/01/2009')
MDY(1,1,2009)
в зависимости от версии и личных предпочтений.