Глядя только на то, почему вы получаете эту ошибку, а не на общую задачу, которую вы пытаетесь выполнить, она генерируется, потому что ваш внешний запрос выполняет:
SELECT B.METER_NAME,
to_char(B.effectiveDate, 'mm/dd/yyyy hh24:mi:ss'),
, но встроенное представлениеB
выполняет:
SELECT
A.METER_NAME,
to_char(A.EFFECTIVE_DATE, 'mm/dd/yyyy hh24:mi:ss') as effectiveDate,
, что означает, что B.effectiveDate
уже является строкой .Если базовое значение даты, скажем, 2019-01-30 01:23:34, то внешний запрос пытается выполнить:
to_char('01/30/2019 01:23:34', 'mm/dd/yyyy hh24:mi:ss')
, и при передаче строки в нем по умолчанию используется значение числовая версия этой функции (вы знаете, что она представляет дату, а Oracle - нет, поэтому ему нужно угадать, какую версию использовать) и пытается неявно преобразовать первый аргумент в число, так как это то, чтофункция ожидает;так что на самом деле он пытается сделать:
to_char(to_number('01/30/2019 01:23:34'), 'mm/dd/yyyy hh24:mi:ss')
и это неявное to_number('01/30/2019 01:23:34')
, которое вызывает ошибку ORA-01722.
Вам необходимо удалить одно из преобразований;либо:
SELECT B.METER_NAME,
B.effectiveDate,
MAX(B.summedVOLUME)
from
(SELECT
A.METER_NAME,
to_char(A.EFFECTIVE_DATE, 'mm/dd/yyyy hh24:mi:ss') as effectiveDate,
или предпочтительно (поэтому значение даты преобразуется в строку в последний возможный момент):
SELECT B.METER_NAME,
to_char(B.effectiveDate, 'mm/dd/yyyy hh24:mi:ss'),
MAX(B.summedVOLUME)
from
(SELECT
A.METER_NAME,
A.EFFECTIVE_DATE,