функция оракула to_date не принимает формат - PullRequest
0 голосов
/ 09 марта 2011

Когда я делаю это в oracle 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 Ответ

7 голосов
/ 09 марта 2011

Вы все немного перепутали. 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 столбца даты.

...