Преобразование строк в даты в PL/SQL Oracle
Первой практической задачей, с которой вы столкнетесь при работе с датами, будет присваивание даты (или времени) переменной PL/SQL. Операция выполняется путем преобразования даты/времени во внутренний формат базы данных. Такие преобразования выполняются либо неявно, присваиванием символьной строки переменной типа даты/времени, либо явно, с помощью встроенных функций Oracle.
Неявное преобразование — вещь рискованная, и мы не рекомендуем на него полагаться. Пример неявного преобразования символьной строки при ее присваивании переменной типа DATE:
DECLARE birthdate DATE; BEGIN birthdate := '15-Nov-1961'; END;
Такое преобразование зависит от установленного значения NLS_DATE_FORMAT. Оно будет успешно работать до тех пор, пока администратор базы данных не решит изменить это значение. Как только он это сделает, код перестанет функционировать. Нарушит работу кода и изменение значения параметра NLS_DATE_FORMAT на уровне сеанса.
Вместо того чтобы полагаться на неявные преобразования и установленное значение параметра NLS_DATE_FORMAT, лучше преобразовывать даты явно, с помощью встроенных функций Oracle — таких, как TO_DATE:
DECLARE birthdate DATE; BEGIN birthdate := TO_DATE('15-Nov-1961','dd-mon-yyyy'); END;
Обратите внимание на передачу форматной строки ‘dd-mon-yyyy’ во втором параметре вызова TO_DATE. Форматная строка управляет интерпретацией символов первого параметра функцией TO_DATE.
PL/SQL поддерживает следующие функции преобразования строк в дату и время:
- TO_DATE(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа DATE.
- TO_DATE(число[, маска[, язык_nls]]) — преобразует строку, содержащую Юлианскую дату, в значение типа DATE.
- TO_TIMESTAMP(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа TIMESTAMP.
- TO_TIMESTAMP_TZ(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа TIMESTAMP WITH TIME ZONE. Функция также используется для преобразования к типу TIMESTAMP WITH LOCAL TIME ZONE.
Эти функции не только ясно показывают, что в коде выполняется преобразование, но и позволяют точно задать используемый формат даты/времени.
Вторая версия TO_DATE может использоваться только с маской форматирования J (Юлианская дата, то есть количество дней, прошедших с 1 января 4712 года до н. э.). Только в этом варианте использования TO_DATE в первом параметре может передаваться число.
Метки: Oracle, Дата и время.