›  ›  ›  › Преобразование строк в даты в PL/SQL Oracle

Преобразование строк в даты в 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 в первом параметре может передаваться число.

Метки: , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован.