TO_DATE( date_string, format_model )
принимает строку для первого аргумента, но вы передаете тип данных DATE
, который Oracle постарается помочь и неявно преобразует в ожидаемый тип данных строки, используя свою модель формата по умолчанию; так что ваш внутренний запрос эффективен:
SELECT attr_value,
TO_DATE(
TO_CHAR(
DATE '1970-01-01' + (1 / 24 / 60 / 60 / 1000) * attr_value,
(SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT')
),
'yyyy-mm-dd HH24:mi:ss'
) AS estimatedenddate
FROM attr
WHERE attr_name = 'createTimestamp'
Вместо этого вы можете просто удалить функцию TO_DATE()
:
SELECT trunc(estimatedenddate,'hh') AS reg_date,
COUNT(*)
FROM (
SELECT DATE '1970-01-01' + (1 / 24 / 60 / 60 / 1000) * attr_value AS estimatedenddate
FROM attr
WHERE attr_name = 'createTimestamp'
)
WHERE estimatedenddate > DATE '2018-06-01'
GROUP BY trunc(estimatedenddate,'hh')
ORDER BY reg_date DESC;