Вы можете использовать функцию SQL TO_CHAR
для возврата текстовых частей даты, для сравнения с соответствующими текстовыми частями sysdate
.В приведенном вами примере это будет выглядеть так:
CASE WHEN {transaction.type} = 'Invoice'
AND {transaction.custbody1} = 'Direct'
AND TO_CHAR({trandate}, 'YYYY') = TO_CHAR(sysdate, 'YYYY')
THEN {transaction.amount}
END
Вы можете использовать один и тот же подход с разными форматами, чтобы получить практически любую дату.Вы также можете использовать EXTRACT
, чтобы получить немного лучшую производительность в некоторых ситуациях.EXTRACT
возвращает число, а не текст.
CASE WHEN {transaction.type} = 'Invoice'
AND {transaction.custbody1} = 'Direct'
AND EXTRACT(YEAR from {trandate}) = EXTRACT(YEAR FROM sysdate)
THEN {transaction.amount}
END
Возможно, вам будет проще использовать TO_CHAR
, если вы хотите объединить разные части даты.Например: TO_CHAR({trandate}, 'YYYY-MM') = TO_CHAR(sysdate, 'YYYY-MM')
вместо EXTRACT(YEAR from {trandate}) = EXTRACT(YEAR from sysdate) AND EXTRACT(MONTH from {trandate}) = EXTRACT(MONTH from sysdate)