как использовать функцию substr с to_date в sql? - PullRequest
0 голосов
/ 21 февраля 2020

запрос:

select substr(to_date('01-02-2018','mm-dd-yyyy'),4,3) from dual;

вывод:

JAN

Кто-нибудь может объяснить, как получился вывод?

1 Ответ

4 голосов
/ 21 февраля 2020

Когда вы применяете текстовую функцию непосредственно к чему-либо, имеющему тип данных 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')
...