Погружение в базы данных PostgreSQL

Данный курс является консолидацией теоретических основ и практических примеров, которые демонстрируют работу операторов и функций SQL в системе управления базами данных PostgreSQL.

Промокод на скидку: SALE_202412

Подробнее

Регулярные выражения в Python

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

Пройти курс

Модуль psycopg2 в Python

Модуль psycopg2 позволяет взаимодействовать с базами данных PostgreSQL в скриптах Python.

Пройти курс

Модуль SQLite3 в Python

Встроенный модуль SQLite3 позволяет работать с базами данных SQLite в ваших приложениях, которые написаны на языке программирования Python.

Пройти курс

Погружение в базы данных Oracle

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Купить книгу

SQL без слёз

Цель книги заключается в том, чтобы научить любого человека работать с реляционными базами данных и получать из них необходимую информацию посредством выполнения SQL-запросов.

Скачать книгу

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