Oracle преобразовать метку времени в дату

Обновлено: 30.06.2024

Функция Oracle TO_CHAR() преобразует значение DATE или INTERVAL в строку в указанном формате даты.

Функция Oracle TO_CHAR() очень полезна для форматирования внутренних данных даты, возвращаемых запросом, в определенном формате даты.

Синтаксис

Следующее иллюстрирует синтаксис функции TO_CHAR():

Аргументы

Oracle TO_CHAR() принимает три аргумента:

1) выражение

Выражение представляет собой значение DATE или INTERVAL, которое необходимо преобразовать.

Тип данных expr может быть DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE или TIMESTAMP WITH LOCAL TIME ZONE .

2) формат_даты

Формат_даты — это строка, определяющая формат, в котором должна быть строка результата.

Аргумент date_format является необязательным. Если его не указать, функция TO_CHAR() будет использовать формат даты по умолчанию для значений DATE, формат отметки времени по умолчанию для значений TIMESTAMP и TIMESTAMP WITH TIME ZONE и формат отметки времени по умолчанию с форматом часового пояса для значений TIMESTAMP WITH TIME ZONE.

Чтобы составить значение для аргумента date_format, вы используете модель формата даты Oracle.

3) нлпарам

Аргумент nlsparam указывает языки для названий и сокращений дней и месяцев, например, понедельник, понедельник, январь, январь и т. д., в строке результата.

Аргумент nlsparam имеет следующую форму:

Этот аргумент nlsparam также является необязательным. Если его не указать, функция TO_CHAR() использует язык даты по умолчанию.

Возвращаемое значение

Функция Oracle TO_CHAR() возвращает строку, представляющую значение DATE или INTERVAL в указанном формате.

Примеры

A) Преобразование текущей системной даты

Следующий оператор преобразует текущую системную дату в строку формата ГГГГ-ММ-ДД :

Чтобы преобразовать текущую системную дату в длинную строку даты, используйте формат даты DL следующим образом:

Вот результат:

Чтобы отобразить названия дня и месяца на другом языке, например на французском, используйте аргумент nlsparam следующим образом:

Результат на французском языке:

B) Пример форматирования интервала

В этом примере используется функция TO_CHAR() для форматирования интервала:

Вот результат:

C) Пример форматирования дат из табличных данных

Посмотрите таблицу сотрудников в образце базы данных:

В следующем операторе используется функция TO_CHAR() для возврата квартала, когда сотрудники пришли в компанию в 2016 году:

На рисунке ниже показан результат:

Oracle TO_CHAR пример функции

В этом руководстве вы узнали, как использовать функцию Oracle TO_CHAR() для преобразования значения DATE или INTERVAL в строку в указанном формате.

Проблема, с которой сталкиваются люди при использовании типа данных DATE, заключается в выполнении арифметических действий в столбце, чтобы вычислить количество лет, недель, дней, часов и секунд между двумя датами. Что нужно понимать при выполнении расчета, так это то, что когда вы выполняете вычитание между датами, вы получаете число, представляющее количество дней. Затем вы должны умножить это число на количество секунд в сутках (86400), прежде чем продолжить вычисления для определения интересующего вас интервала.

DEFINE Today = TO_DATE('03.12.2004:10 :34:24','ДД.ММ.ГГГГ:ЧЧ24:МИ:СС')

Hiredate Today Sec Min Hrs Days
--------------------------------- ------------------ --- --- --- -----
17.12.1980:00:00:00 03.12.2004:10:34:24 24 34 10 8752

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

Если вам нужно решение, которое разбивает дни на годы и месяцы, вы можете использовать следующий запрос. Мы будем использовать дату високосного года, например, 01.01.2000, для временных целей. Эта дата обеспечит точные расчеты в большинстве случаев.

DEFINE DateDay = 8752,44056

SELECT
TO_NUMBER(SUBSTR(A,1,4)) - 2000 лет,
TO_NUMBER(SUBSTR(A,6,2)) - 01 месяц,
TO_NUMBER(SUBSTR( A,9,2)) - 01 дней,
SUBSTR(A,12,2) часов,
SUBSTR(A,15,2) минут,
SUBSTR(A,18,2) ) секунд
FROM (SELECT TO_CHAR(TO_DATE('20000101','YYYYMMDD')
+ &DateDay,'YYYY MM DD HH24:MI:SS') A
FROM DUAL);

ГОДЫ МЕСЯЦЫ ДНИ HO MI SE
---------- ---------- ---------- -- -- --
23 11 17 10 34 24

Одной из основных проблем с типом данных DATE была его неспособность быть достаточно детализированным, чтобы определить, какое событие могло произойти первым по отношению к другому событию.Oracle расширил тип данных DATE и предоставил нам тип данных TIMESTAMP, который хранит всю информацию, хранимую типом данных DATE, но также включает доли секунды.

Преобразовать тип данных DATE в тип данных TIMESTAMP

Если вы хотите преобразовать тип данных DATE в формат типа данных TIMESTAMP, просто используйте функцию CAST. Как видите, в конце этого преобразования есть доли секунды от «.000000». Это происходит только потому, что при преобразовании из типа данных DATE, который не содержит дробных секунд, по умолчанию используются нули, а для отображения по умолчанию используется формат метки времени по умолчанию (NLS_TIMESTAMP_FORMAT). Если вы перемещаете столбец с типом данных DATE из одной таблицы в столбец с типом данных TIMESTAMP из другой таблицы, все, что вам нужно сделать, это INSERT SELECT FROM, и Oracle сделает преобразование за вас.

CREATE TABLE date_table (
дата1 ДАТА,
время1 TIMESTAMP,
время2 TIMESTAMP
);

INSERT INTO date_table (date1, time1, time2)
VALUES (SYSDATE,
TO_TIMESTAMP ('17.12.1980:00:00:00','DD.MM.YYYY:HH24:MI: СС'),
TO_TIMESTAMP ('03.12.2004:10:34:24','ДД.ММ.ГГГГ:ЧЧ24:МИ:СС')
);
СОВЕРШИТЬ;

ВЫБРАТЬ CAST(date1 AS TIMESTAMP) "Дата" ИЗ date_table;

Функция TO_TIMESTAMP

Функция TO_TIMESTAMP преобразует строку в метку времени. Синтаксис функции to_timestamp:

TO_TIMESTAMP (string, [format_mask] ['nlsparam'])

string — это строка, которая будет преобразована к метке времени.
format_mask указывать необязательно. Это формат, который будет использоваться для преобразования строки в метку времени.

Ниже приведен список параметров для параметра format_mask. Эти параметры можно использовать во многих комбинациях.

< td valign="top" width="390">

Название месяца, дополненное пробелами до 9 символов.

< td valign="top" width="93">

HH24

Параметр

Пояснение

< p>ГГГГ

4-значный год

MM

Месяц (01-12; JAN = 01).

MON

Сокращенное название месяца.

МЕСЯЦ

DD

День месяца (1-31).

ЧЧ

Час дня (1-12).

ЧЧ 12

Час дня (1-12).

Час дня (0-23).< /p>

MI

Минуты (0-59).

СС

Секунда (0-59).

Форматирование типа данных TIMESTAMP

Форматирование нового типа данных TIMESTAMP такое же, как форматирование типа данных DATE. Остерегайтесь, хотя функция TO_CHAR работает с обоими типами данных, функция TRUNC не будет работать с типом данных TIMESTAMP. Это явное указание на то, что использование типа данных TIMESTAMP следует явно использовать для даты и времени, когда разница во времени имеет первостепенное значение, так что Oracle даже не позволит вам сравнивать одинаковые значения. Если вы хотите отобразить доли секунды в типе данных TIMESTAMP, посмотрите на «FF3», чтобы показать только 3 заполнителя для дробных секунд.

Форматирование типа данных TIMESTAMP:

SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS') "Date"
FROM date_table;

Date
--------- ----------
17.12.1980 00:00:00

Форматирование типа данных TIMESTAMP с дробными секундами:

SELECT TO_CHAR( time1,'MM/DD/YYYY HH24:MI:SS:FF3') "Date"
FROM date_table;

Вычитание двух типов данных TIMESTAMP

NEXT_DAY (дата, символ)

NEXT_DAY возвращает дату первого дня недели, указанную с помощью char, которая позже, чем date. Тип возвращаемого значения всегда DATE, независимо от типа данных date. Аргумент char должен быть днем ​​недели на языке даты вашего сеанса, либо полным именем, либо аббревиатурой. Минимальное необходимое количество букв равно количеству букв в сокращенной версии. Любые символы, следующие непосредственно за действительной аббревиатурой, игнорируются. Возвращаемое значение содержит те же часы, минуты и секунды, что и дата аргумента.

Вернуть дату следующего понедельника после настоящего момента:

SELECT TO_CHAR(NEXT_DAY(sysdate,'MON'),'DD.MM.YYYY') "Следующий понедельник с сегодняшнего дня" < br />FROM DUAL;

Следующий понедельник
-----------
12.06.2004

LAST_DAY возвращает дату последнего дня месяца, содержащего дату. Тип возвращаемого значения всегда DATE, независимо от типа данных даты.

Следующее выражение определяет, сколько дней осталось в текущем месяце:

SELECT SYSDATE,
LAST_DAY(SYSDATE) «Последний»,
LAST_DAY(SYSDATE) - SYSDATE "Осталось дней"
FROM DUAL;

SYSDATE Осталось последних дней
--------- --------- ----------
03-DEC-04 31- DEC-04 28

Получить последнюю дату месяца:

SELECT LAST_DAY (TO_DATE ('02','MM')) FROM dual;

Timestamp to Date в Oracle

Oracle предоставляет пользователю различные функции и формат даты и метки времени, мы можем преобразовать метку времени в дату в соответствии с требованиями пользователя, в оракуле мы можем использовать команду изменения таблицы или функцию приведения для целей преобразования, база данных оракула обрабатывает формат даты в прямой и простой способ, и его очень легко понять и использовать, но многие пользователи и разработчики PL / SQL испытывают трудности с типом данных метки времени и даты. Основная проблема с меткой времени и датой заключается в том, что они не знают, как хранить дату и метку времени. Но приведение временных меток к дате очень просто.

Синтаксис:

Hadoop, наука о данных, статистика и др.

выбрать псевдоним конкретной функции (системная текущая временная метка) из указанного имени таблицы;

Пояснение:

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

Как преобразовать метку времени в дату в Oracle?

Приведенное ниже показывает, как мы можем преобразовать метки времени в дату в оракуле:

Тип данных даты:

Это один из типов данных, с которым мы обычно очень хорошо знакомы, когда рассматриваем оценку даты и времени. Он используется для хранения значений в различных формах, таких как месяц, день, год, век, часы, минуты и секунды. Это обычно полезно для обращения к информации о том, когда что-то произошло или должно произойти позже. Проблема с типом данных даты заключается в его детализации при попытке определить промежуток периода между двумя событиями, когда события происходят внутри момента друг друга.

Здесь мы преобразуем метку времени в тип данных даты, но есть некоторые проблемы с датой, например, мы не можем определить, какое событие происходит первым, а какое событие происходит вторым из-за типа данных даты, поэтому мы используем тип данных метки времени для легко определить время и дату события в соответствии с требованиями.

В базах данных Oracle используется формат даты DD – MON – YY, и это стандартный формат оракула, и он управляется параметром NLS_DATE_FORMAT. Когда пользователю необходимо отобразить значение даты в это время, база данных оракула сначала преобразует это значение даты в указанный внутренний формат оракула. Это приведение использует функцию TO_CHAR. В Oracle используется формат даты по умолчанию: ДД – ПЕС – ГГ.

База данных Oracle использует следующую функцию данных в соответствии с требованиями пользователя следующим образом:

  • CURRENT_DATE: с помощью этой функции мы можем вернуть текущую системную дату и время с текущим часовым поясом.
  • SYSDATE: с помощью этой функции мы можем получить текущую системную дату.
  • SYSTIMESTAMP: с помощью этой функции мы можем получить текущую дату и время с долями секунды системы.
  • MM: с помощью этого параметра мы можем отображать месяц в числовом формате, например, 09.
  • MON: этот параметр используется для возврата названия месяца, например, APR.
  • МЕСЯЦ: с помощью этого параметра отображается полное название месяца, например, АПРЕЛЬ.
  • DD: с помощью этого параметра мы можем отображать дату, например, 12.
  • DY: с помощью этого параметра мы можем отображать название дня, например, MON.
  • ГГГГ: с помощью этого параметра мы отображаем год, например 2021.
  • ГГ: с помощью этого параметра мы отображаем две последние цифры года, например 21.

Для преобразования метки времени в дату мы используем функцию приведения, эта функция работает с текущей меткой времени системы, в основном метка времени содержит всю информацию о дате, которая означает час, минуту и ​​секунду, но иногда нам нужна только дата в то время, когда мы необходимо приведение временной метки к дате типа данных. Это очень простая функция, и мы можем напрямую использовать ее в операторах SQL.

Обучение Oracle (14 курсов, 8+ проектов) 14 онлайн-курсов | 8 практических проектов | 120+ часов | Поддающийся проверке сертификат об окончании | Пожизненный доступ
4,5 (8 460 оценок)

Пример метки времени для даты в Oracle

Ниже приведен пример метки времени до даты в Oracle:

Но сначала нам нужно создать новую таблицу, используя следующую инструкцию SQL следующим образом.

Код:

создать таблицу t_d(timedate timestamp(4));

Пояснение:

  • В приведенном выше примере мы создали новую таблицу с именем t_d, столбцом даты и времени и отметкой времени 4 с помощью оператора создания таблицы.

Вывод:

Timestamp to Date в Oracle 1

После вставки значения метки времени с помощью следующего оператора следующим образом.

Код:

вставить в t_d select системную метку из двойного;

Пояснение:

  • В приведенном выше примере мы используем оператор вставки для вставки временной метки в таблицу t_d. Здесь мы извлекаем временную метку из двойной таблицы, и эта таблица сгенерирована системой, поэтому мы пытаемся получить текущую временную метку и эту временную метку мы вставили в таблицу t_d, как показано в приведенном выше выражении.

Вывод:

из двойной таблицы

Теперь мы можем увидеть метку времени, используя следующий оператор следующим образом.

Код:

выберите * из t_d;

Пояснение:

  • В приведенном выше примере мы используем предложение select, чтобы увидеть отметку времени, которая вставляется из двойной таблицы.

Вывод:

мы используем команду изменения таблицы

Теперь используйте команду alters table, чтобы преобразовать дату из временной метки, используя следующий оператор следующим образом.

Код:

изменить таблицу t_d изменить (время-дата-дата);

Пояснение:

  • В приведенном выше примере мы используем команду alter table для приведения даты к отметке системного времени, как показано в операторе выше.

Вывод:

Теперь, наконец, мы можем увидеть дату, которую мы конвертируем из метки времени, используя следующую инструкцию следующим образом.

Код:

выберите * из t_d;

Пояснение:

  • В приведенном выше примере мы используем предложение select, чтобы увидеть текущую дату, которую мы привели к отметке времени.

Вывод:

Таким образом, мы можем преобразовать отметку времени в дату в оракуле, мы также можем преобразовать функцию для преобразования.

Заключение

Из приведенной выше статьи мы увидели основной синтаксис метки времени на сегодняшний день, а также различные примеры метки времени на сегодняшний день. Из этой статьи мы увидели, как и когда мы используем метку времени для даты в оракуле.

Рекомендуемые статьи

Это руководство по отметке времени до даты в Oracle. Здесь мы обсуждаем введение, как преобразовать метку времени в дату в оракуле? и пример. Вы также можете ознакомиться со следующими статьями, чтобы узнать больше –

То, как база данных Oracle обрабатывает значения даты и времени, довольно простое, но, похоже, оно сбивает с толку многих разработчиков клиентской части и разработчиков PL/SQL. Подавляющее большинство проблем, с которыми сталкиваются люди, связано с непониманием того, как даты хранятся в базе данных. То, что вы видите на экране из запроса, это то, что находится в базе данных, верно? На самом деле это часто не так.

Клиентские инструменты, такие как SQL*Plus, преобразуют значения столбцов даты и времени во что-то гораздо более приятное на вид. При этом они часто упускают очень важную информацию, которая может сбить вас с толку, если вы не будете внимательны. В следующих примерах используется тип DATE, но проблемы в равной степени относятся и к типу TIMESTAMP.

Значит, оба столбца содержат одно и то же значение, верно?

Оба столбца DATE и TIMESTAMP содержат компонент времени, который в данном случае не совпадает. SQL*Plus преобразовал внутреннее представление даты в удобную для нас строку, но пропустил компонент времени. Почему оно сделало это? Поскольку он использовал маску формата, заданную параметром NLS_DATE_FORMAT, чтобы решить, как неявно преобразовать дату в строку. С помощью этого скрипта можно отобразить текущие значения параметров NLS для базы данных, экземпляра и сеанса. Чтобы получить полные данные, мы должны либо явно запросить их, используя функцию TO_CHAR с маской формата.

Или установите NLS_DATE_FORMAT в желаемую маску формата.

Еще одна распространенная ошибка — когда вы указываете дату в виде строки.

Эта строка выглядит вполне приемлемой для меня, потому что я понимаю различия в форматах даты, и для меня это выглядит как британское представление «27 апреля 2013 года», но база данных этого не знает. Чтобы исправить это, мы должны либо явно использовать функцию TO_DATE с маской формата, либо установить NLS_DATE_FORMAT соответствующим образом, либо использовать литерал ANSI DATE.

При использовании значений Oracle DATE или TIMESTAMP помните следующие простые правила, и вы, вероятно, избежите большинства распространенных ошибок.

  • Оба типа DATE и TIMESTAMP *всегда* содержат компоненты даты и времени. Ровно в полночь время 00:00:00.
  • Никогда не полагайтесь на неявное преобразование строк в даты или дат в строки. Всегда явно выполняйте преобразования с помощью функций TO_CHAR, TO_DATE и TO_TIMESTAMP или используйте литералы ASNI DATE или TIMESTAMP.
  • При сравнении даты или времени всегда учитывайте влияние компонента времени. Если вы хотите исключить компонент времени из сравнения, используйте функции TRUNC или ROUND, чтобы удалить его из обеих сторон сравнения.

В оставшейся части этой статьи типы DATE , TIMESTAMP и INTERVAL будут обсуждаться более подробно.

Тип данных DATE используется Oracle для хранения всей информации о дате и времени, где не требуется точность более 1 секунды. Oracle использует 7-байтовый двоичный формат даты, который позволяет хранить даты по юлианскому календарю в диапазоне от 01 января 4712 г. до н.э. до 31 декабря 9999 г. н.э. В следующей таблице показано, как каждый из 7 байтов используется для хранения информации о дате.

< tr> td>
Байт Значение Обозначение Пример (10 июля 2004 г., 17:21:30)
1 Век Деление на 100, превышение-100 120
2 Год Модуль 100, превышение-100 104
3 Месяц 0 base 7
4 День0 base 10
5 Час превышение-1 18
6 минута превышение-1 22
7 Второй избыточный-1 31

В следующем примере функция дампа используется для отображения содержимого сохраненной даты.

Сравнивая значения даты и дампа, мы видим, что вычитание 100 из компонента века, а затем умножение полученного значения на 100 дает значение 2000. Вычитание 100 из компонента года дает значение 4. Компоненты месяца и дня нужны без изменений, при вычитании 1 из составляющих часов, минут и секунд (18, 22 и 31) получаются значения 17, 21 и 30.

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

< /tr>
Период Выражение 1 Выражение 2 Выражение 3 Значение
1 день 1 1 1 1
1 час 1/24 1/24 1/24 .041666667
1 минута 1/24/60 1/(24*60) 1/1440 .000694444
1 секунда 1/24/60/60 1/(24 *60*60) 1/86400 .000011574

Следующий запрос показывает, как мы можем использовать эти выражения для изменения значения текущей даты операционной системы.

Oracle предоставляет несколько функций работы с датами, упрощающих работу с датами. В следующей таблице перечислены некоторые из них и примеры их использования.

Возвращает текущую дату и время из операционной системы сервера базы данных.

Аналогична функции sysdate, но возвращает текущую дату и время в часовом поясе сеанса.

Добавляет или вычитает указанное количество месяцев от указанной даты.

Возвращает последний день месяца, содержащего указанную дату.

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

Возвращает дату первого дня, совпадающего с указанным днем, наступающим после указанной даты.

Преобразует дату из часового пояса1 в соответствующую дату для часового пояса2.

Преобразует указанную дату в строку, используя указанную маску формата. Если маска формата опущена, используется значение NLS_DATE_FORMAT.Существует также перегрузка этой функции для обработки временных меток, где маска формата по умолчанию берется из значения NLS_TIMESTAMP_FORMAT или NLS_TIMESTAMP_TZ_FORMAT.

Преобразует указанную строку в дату, используя указанную маску формата. Если маска формата опущена, используется значение NLS_DATE_FORMAT.

Возвращает дату, округленную до уровня, заданного форматом. Значением по умолчанию для формата является DD, возвращая дату без дробной части (времени), что делает ее представляющей полночь указанной даты или следующую дату в зависимости от округления.

Возвращает дату, усеченную до уровня, заданного форматом. Значением по умолчанию для формата является DD, усекая дробную часть (время) и заставляя ее представлять полночь указанной даты. Использование функции TRUNC позволяет сравнивать даты без временных компонентов, отвлекающих от истинного смысла сравнения. Она похожа на функцию округления, за исключением того, что всегда округляет в меньшую сторону.

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

К первому году века (1901, 2001, 2101 и т. д.)

К году. Округляется до 1 января.

К году ISO.

В квартал с округлением до 16-го числа второго месяца.

К месяцу с округлением до 16-го числа.

В тот же день недели, что и в первый день года.

В тот же день недели, что и первый день года по ISO.

В тот же день недели, что и в первый день месяца.

К начальному дню недели.

Далее мы обсудим тип данных TIMESTAMP, который во многом похож на тип данных DATE.

ОТМЕТКА ВРЕМЕНИ

Тип данных TIMESTAMP является расширением типа данных DATE. В дополнение к элементам datetime типа данных DATE, тип данных TIMESTAMP содержит доли секунды с точностью от 0 до 9 знаков после запятой, значение по умолчанию — 6. Существуют также два варианта: TIMESTAMP WITH TIME ZONE и TIMESTAMP WITH LOCAL TIME ZONE. . Как следует из названия, эти метки времени также хранят информацию о смещении часового пояса.

Как и даты, временные метки хранятся в двоичном формате даты. В случае TIMESTAMP это 11 байтов, в то время как с информацией о часовом поясе требуется 13 байтов. В следующей таблице показано, как каждый из 11–13 байтов используется для хранения информации о временной метке.

< /tr> < tr>

В следующем примере функция дампа используется для отображения содержимого сохраненной метки времени.

Первые 7 компонентов соответствуют компонентам типа данных DATE, хотя они могут выглядеть запутанно из-за действия смещения. В этом примере смещение +01:00 заставляет компонент часа выглядеть в базовой нотации 0, а не в избытке-1, но когда мы добавляем смещение, мы ясно видим, что это не так. Компонент смещения представляет собой количество минут, на которое время смещено из-за часового пояса.

Математические операции и большинство функций даты, упомянутых ранее, также применимы для меток времени. В дополнение к функциям работы с датами Oracle предоставляет несколько специальных функций для отметок времени, перечисленных в таблице ниже.

Возвращает текущую TIMESTAMP из операционной системы сервера базы данных с указанной точностью. Если точность не указана, по умолчанию используется значение 6.

Аналогична функции SYSTIMESTAMP, но возвращает текущую TIMESTAMP WITH TIME ZONE в часовом поясе сеанса с указанной точностью. Если точность не указана, по умолчанию используется значение 6.

Аналогична функции current_timestamp, но возвращает текущую TIMESTAMP с часовым поясом в часовом поясе сеанса с указанной точностью. Если точность не указана, по умолчанию используется значение 6.

Преобразует указанную строку в TIMESTAMP, используя указанную маску формата. Если маска формата не указана, в зависимости от контекста используется значение NLS_TIMESTAMP_FORMAT или NLS_TIMESTAMP_TZ_FORMAT.

Преобразует указанную строку в TIMESTAMP WITH TIME ZONE, используя указанную маску формата. Если маска формата не указана, в зависимости от контекста используется значение NLS_TIMESTAMP_FORMAT или NLS_TIMESTAMP_TZ_FORMAT.

Преобразует TIMESTAMP и строку, представляющую часовой пояс, в TIMESTAMP WITH TIME ZONE .

Возвращает часовой пояс базы данных.

Возвращает часовой пояс текущего сеанса.

Возвращает отметку времени в формате UTC или GMT из указанного TIMESTAMP WITH TIME ZONE .

Извлекает указанную часть даты из указанной отметки времени.

Далее мы увидим, как преобразовать временные метки в даты.

Преобразование временных меток и дат

Функция CAST может использоваться для преобразования TIMESTAMP в DATE и наоборот. Сначала давайте преобразуем TIMESTAMP в DATE .

Чтобы преобразовать DATE в TIMESTAMP, выполните следующие действия.

Далее мы увидим, как интервалы могут храниться в базе данных и определяться с использованием синтаксиса литерала интервала.

ИНТЕРВАЛ

Интервалы позволяют хранить определенный период времени, разделяющий два значения даты и времени. В настоящее время существует два поддерживаемых типа интервала: один задает интервалы в годах и месяцах, а другой задает интервалы в днях, часах, минутах и ​​секундах. Синтаксис этих типов данных показан ниже.

Элементы точности определяются следующим образом.

  • year_precision – максимальное количество цифр в компоненте года интервала, при котором точность, равная 3, ограничивает интервал максимальным значением 999 лет. Значение по умолчанию – 2.
  • day_precision – максимальное количество цифр в компоненте дня интервала, при котором точность, равная 4, ограничивает интервал до 9999 дней. Точность дня может принимать значение от 0 до 9, при этом значение по умолчанию равно 2.
  • fraction_second_precision – количество цифр в дробной части интервала. Допускаются значения от 0 до 9, значение по умолчанию — 6.

Следующая таблица создана, чтобы показать, как можно использовать интервалы в качестве определений столбцов.

Интервальные литералы используются для определения интервалов простым для понимания способом. Существует два отдельных определения синтаксиса, по одному для каждого типа интервала. Полные определения синтаксиса могут немного сбивать с толку, поэтому мы пропустим те из них в пользу примеров, которые должны прояснить их использование.

Сначала мы начнем с литерального синтаксиса интервала ГОД В МЕСЯЦ. Точность по умолчанию для полей указана ниже вместе с допустимыми значениями, если они указаны в качестве конечного поля.

  • YEAR – количество лет с точностью до двух цифр по умолчанию.
  • МЕСЯЦ – количество месяцев с точностью до 4 цифр по умолчанию. Если указано как конечное поле, оно имеет допустимые значения от 0 до 11.
Байт Значение Обозначение Пример (10 июля 2004 г. 17:21:30.662509 +01:00)
1 Век Деление на 100, превышение-100 120
2 Год Модуль 100, превышение-100 104
3 Месяц 0 base 7
4 День 0 base 10
5 Час превышение -1 (-смещение) 17
6 минута превышение-1 22
7 Второй избыточный-1 31
8 Доля секунды 9-значное целое, хранящееся в 4 байтах 39 125,21 200
9
10
11
12 Часовой пояс excess-20 21
13 Мин. часовой пояс excess-60 60
< td>Интервал в 1 год.
Интервал Литерал Значение
ИНТЕРВАЛ '21-2' ГОД В МЕСЯЦ Интервал 21 год и 2 месяца.
ИНТЕРВАЛ '100-5' ГОД( 3) К МЕСЯЦАМ Интервал 100 лет и 5 месяцев. Указана начальная точность, так как она больше значения по умолчанию, равного 2.
ИНТЕРВАЛ '1' ГОД
ИНТЕРВАЛ '20' МЕСЯЦЕВ Интервал в 20 месяцев.
ИНТЕРВАЛ '100' ГОД(3) Интервал в 100 лет. Необходимо указать точность, так как это значение превышает точность по умолчанию.
ИНТЕРВАЛ '10000' МЕСЯЦ(5) Интервал 10 000 месяцев. Необходимо указать точность, поскольку это значение выходит за пределы точности по умолчанию.
ИНТЕРВАЛ '1-13' ГОД ДО МЕСЯЦА Произошла ошибка. Если ведущим полем является ГОД, допустимые значения для МЕСЯЦА составляют от 0 до 11.

Эти интервалы можно проверить, подставив их в следующий запрос. Обратите внимание, как синтаксис месяца преобразуется в значение лет и месяцев.

Интервал ГОД В МЕСЯЦ можно добавить или вычесть из другого, в результате чего получится еще один интервал ГОД В МЕСЯЦ.

Следующие примеры относятся к синтаксису литерала интервала DAY TO SECOND. Как и в предыдущем примере, если указано конечное поле, оно должно быть менее значимым, чем предыдущее поле.

  • DAY – количество дней с точностью до 2 цифр по умолчанию.
  • HOUR — количество часов с точностью до трех цифр по умолчанию. Если указано как конечное поле, оно имеет допустимые значения от 0 до 23.
  • МИНУТЫ – количество минут с точностью до 5 цифр по умолчанию.Если указано как конечное поле, оно может иметь допустимые значения от 0 до 59.
  • SECOND — количество секунд с точностью по умолчанию, равной 7 значениям до десятичной точки и 6 значениям после. Если указано как конечное поле, оно имеет допустимые значения от 0 до 59,999999999.
Interval Literal Значение
INTERVAL '2 3:04: 11,333' ДЕНЬ ДО ВТОРОЙ(3) 2 дня, 3 часа, 4 минуты, 11 секунд и 333 тысячных секунды.
ИНТЕРВАЛ '2 3:04' ДЕНЬ ДО МИНУТЫ 2 дня, 3 часа, 4 минуты.
ИНТЕРВАЛ '2 3' ДЕНЬ ДО ЧАСА 2 дня, 3 часа.
ИНТЕРВАЛ '2' ДЕНЬ 2 дня.
ИНТЕРВАЛ '03:04:11.333' ЧАС ДО СЕКУНДЫ 3 часа, 4 минуты, 11 секунд и 333 тысячных секунды.
ИНТЕРВАЛ ' 03:04' ЧАС В МИНУТУ 3 часа 4 минуты.
ИНТЕРВАЛ '40' ЧАС< /td> 40 часов.
ИНТЕРВАЛ '04:11.333' ОТ МИНУТЫ ДО СЕКУНДЫ 4 минут, 11 секунд и 333 тыс. доли секунды.
ИНТЕРВАЛ '70' МИНУТ 70 минут.
ИНТЕРВАЛ '70' SECOND 70 секунд.
ИНТЕРВАЛ '03:70' ЧАС ДО МИНУТЫ Произошла ошибка. Если указано начальное поле, допустимые значения для конечного поля должны быть в пределах нормы.

Подставив вышеуказанные интервалы в следующий запрос, вы сможете проверить их. Обратите внимание, как используется точность по умолчанию для секунд, потому что мы не ограничиваем ее тремя знаками после запятой.

Интервал DAY TO SECOND можно добавить к другому интервалу или вычесть из него, в результате чего получится еще один интервал DAY TO SECOND.

Интервалы также можно комбинировать с датами для управления значениями дат. Следующий запрос показывает, как это сделать.

Oracle предоставляет несколько специальных функций для интервалов, которые перечислены в таблице ниже.

Преобразует указанное целое число в интервал ГОД В МЕСЯЦ, где целое число представляет количество единиц.

Преобразует указанное целое число в интервал DAY TO SECOND, где целое число представляет количество единиц.

Преобразует строку, представляющую интервал, в интервал ГОД В МЕСЯЦ.

Преобразует строку, представляющую интервал, в интервал DAY TO SECOND.

Читайте также: