Функция оракула 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 столбца даты.

Другие вопросы по тегам