2016-02-10 5 views
-3

Ниже приведен кодНевозможно сравнить два to_date столбцов в SQL

and replace(to_char(to_date(FDP.Period_NAME,'MM-YY'),'MM-YY'),'-','') 
     <= replace(to_char(to_date('JAN-16','MM-YY'),'MM-YY'),'-','') 

И ошибка

Error: ORA-01843: not a valid month 01843. 00000 - "not a valid month" *Cause:
*Action:

+1

Что такое 'FDP.Period_NAME'? Похоже, что это недействительный формат. –

+2

У вас неправильная маска формата в 'to_date ('JAN-16', 'MM-YY')'. Посмотрите [здесь] (http://docs.oracle.com/cd/B19306_01 /server.102/b14200/sql_elements004.htm#i34924). Кроме того, что вам нужно делать? – Aleksej

+3

Итак, вы преобразовываете строку в дату, а затем в строку, а затем сравниваете строки с '<='? –

ответ

0

Интересно ....

В документации Oracle here говорит, что маска формата «MM» соответствует «Month (01-12; January = 01)», но вы используете «JAN», который не должен работать.

Но когда я проверил ваш код в моей базе данных, он таинственно работает !!!

SQL> select replace(to_char(to_date('JAN-16','MM-YY'),'MM-YY'),'-','') from dual; 

REPLA 
----- 
0116 

Еще бы я изменить «JAN» в «01» и убедитесь, что столбец FDP.Period_NAME не содержит месяцев языке Генеральный Общие Аббревиатура, как «JAN», «» ТЭБ ...

ИЛИ изменение ваша маска формата соответствует именам сокращенного месяца (например, «MON»).

+0

Гибкость - это хорошо известное поведение, даже если документы не дают понять. Вы можете изменить поведение с помощью [модификатора формата FX] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements004.htm#SQLRF30004): «Формат точный. Этот модификатор определяет точное соответствие для аргумент символа и формат формата даты и времени TO_DATE ". –

Смежные вопросы