Хранение значений даты в виде строк, таких как 'FEB-18'
, на самом деле является недостатком дизайна.Вам следует подумать о переходе на тип данных DATE
(или TIMESTAMP
).
- Вы никогда не слышали о Year-2000-Problem ?Ну, я полагаю, когда все в мире ИТ говорили о проблеме Y2K, многие нынешние разработчики программного обеспечения были еще детьми.
- Строка может быть искажена любым способом.
- Даже если строка имеет правильный формат, вы можете столкнуться с проблемой языковых настроек.
В любом случае, возможно, это только языковая проблема.Попробуйте это
WHERE TO_DATE(BAL.PERIOD_NAME,'MON-RR', 'NLS_DATE_LANGUAGE = American') > DATE '2018-02-01'
Если вы используете Oracle 12.2 или новее, вы можете использовать функцию VALIDATE_CONVERSION :
WHERE VALIDATE_CONVERSION(BAL.PERIOD_NAME, 'MON-RR', 'NLS_DATE_LANGUAGE = American') = 1
Если у вас нет Oracle 12.2а затем напишите свою собственную функцию, например, так:
CREATE OR REPLACE FUNCTION CONVERT_TO_DATE(str in VARCAHR2) RETURN DATE IS
BEGIN
RETURN TO_DATE(str, 'MON-RR', 'NLS_DATE_LANGUAGE = American');
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END CONVERT_TO_DATE;