Функция оракула to_date не принимает формат
Когда я делаю это в оракуле 10g:
select to_date(trunc(SOMEINPUTdATE)) from table1
where to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
>= to_date('03/11/2011' ,'MM/DD/YYYY')
Я получил: ORA-01843: not a valid month
если я изменю на: 'YYYY/MM/DD'
, оно работает. Но 'MM/DD/YYYY'
правильный формат правильный?
1 ответ
Решение
Вы все немного перепутали. TO_DATE преобразует строку в DATE. Если date_column_timestamp
это уже дата, вам не нужно конвертировать ее в дату.
select trunc(SOMEINPUTdATE) from table1
where trunc(date_column_timestamp)
>= to_date('03/11/2011' ,'MM/DD/YYYY')
ORA-01843
вызвано неявным преобразованием даты в строку. Другими словами, следующее:
to_date(trunc(date_column_timestamp),'MM/DD/YYYY')
эквивалентно (при условии формата даты по умолчанию DD-MON-YYYY
):
to_date(TO_CHAR(trunc(date_column_timestamp),'DD-MON-YYYY'),'MM/DD/YYYY')
Итак TO_CHAR
возвращает что-то вроде '11-MAR-2011'
, который затем вызывает to_date
потерпеть неудачу, потому что форматы даты не совпадают.
Та же проблема существует в вашем select
пункт. Вам не нужно to_date
вокруг trunc
столбца даты.