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

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

Присвоить переменной значение типа даты/времени — только полдела. Еще нужно прочитать его и представить в понятной для человека форме. Для этого в Oracle существует функция TO_CHAR.

Функция TO_CHAR предназначена для преобразования значения даты/времени в строку переменной длины. Она применяется и для типа DATE, и для всех типов семейства TIMESTAMP. Синтаксис функции TO_CHAR:

FUNCTION TO_CHAR
   (входная_дата IN DATE
    [, маска IN VARCHAR2
    [, язык_nls IN VARCHAR2]])
RETURN VARCHAR2

Здесь входная_дата — символьная строка, представляющая значение даты/времени; маска — строка из одного или нескольких элементов формата; язык_nls — строка, задающая язык отображения даты. Параметры маска и язык_nls не являются обязательными.

Чтобы результирующая строка была представлена символами национального набора, вместо функции TO_CHAR следует использовать функцию TO_NCHAR. Но имейте в виду, что в этом случае маска форматирования тоже должна быть задана в символах национального набора. В противном случае будет ошибка.

Если маска не задана, по умолчанию используется формат даты, установленный для базы данных. Это формат ‘DD-MON-RR’, если только администратор не задал другой формат, изменив значение параметра NLS_DATE_FORMAT. Но лучше не зависеть от неявных преобразований даты. Изменения серверных настроек NLS (а в клиентском коде — изменения клиентских настроек NLS) приводят к появлению логических ошибок, если ваш код зависит от неявных преобразований. Если приложение всегда выполняет преобразования явно, такие ошибки исключены.

Примеры использования функции TO_CHAR для преобразования даты

Обратите внимание на два пробела между месяцем и днем, а также на начальный нуль перед номером месяца:

TO_CHAR (SYSDATE, 'Month DD, YYYY')

-- Результат
-- 'February  05, 1994'

Для подавления пробелов и нулей используется элемент FM:

TO_CHAR (SYSDATE, 'FMMonth DD, YYYY')

-- Результат
-- 'February 5, 1994'

Обратите внимание на различие регистра в обозначении месяца в следующих двух примерах (при работе с форматами данных Oracle вы получаете в точности то, что запрашиваете):

TO_CHAR (SYSDATE, 'MON DDth, YYYY')

-- Результат
-- 'FEB 05TH, 1994'

TO_CHAR (SYSDATE, 'fmMon DDth, YYYY')

-- Результат
-- 'Feb 5TH, 1994'

На элемент форматирования TH не распространяются правила задания регистра. Даже если ввести его в нижнем регистре (th), то в выходной строке база данных будет использовать TH.

Вывод дня года, дня месяца и дня недели для заданной даты:

TO_CHAR (SYSDATE, 'DDD DD D ')

-- Результат
-- '036 05 7'

TO_CHAR (SYSDATE, 'fmDDD fmDD D ')

-- Результат
-- '36 05 7'

Нетривиальное форматирование для построения отчета:

TO_CHAR (SYSDATE, '"In month "RM" of year "YEAR')

-- Результат
-- 'In month II   of year NINETEEN NINETY FOUR'

Для переменных типа TIMESTAMP время можно задавать с точностью до миллисекунд:

TO_CHAR (A_TIMESTAMP, 'YYYY-MM-DD HH:MI:SS.FF AM TZH:TZM')

-- Результат
-- значение вида 2002-02-19 01:52:00.123457000 PM -05:00

Метки: , .

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

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

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