Когда вы применяете текстовую функцию непосредственно к чему-либо, имеющему тип данных DATE, вы заставляете неявное преобразование даты в строку. Это преобразование использует параметр NLS_DATE_FORMAT для определения формата выходной строки.
В действительности
substr(to_date('01-02-2018','mm-dd-yyyy'),4,3)
совпадает с
substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), <NLS_DATE_FORMAT>),4,3)
Обычное значение по умолчанию (для языковых версий базы данных на английском языке sh) для параметра NLS_DATE_FORMAT задано значение DD-MON-RR
, что соответствует значению параметра NLS_DATE_FORMAT, что означает, что ваш запрос выполняет:
substr(to_char(to_date('01-02-2018','mm-dd-yyyy'), 'DD-MON-RR'),4,3)
Следовательно, substr
работает со строкой 02-JAN-18
, а 3 символа, начиная с 4-го символа, равны JAN
.
Вместо того, чтобы использовать substr
в дату, вы должны сделать вместо этого лучше использовать to_char
, например:
to_char(to_date('01-02-2018', 'mm-dd-yyyy'), 'MON')