Oracle добавляет месяц к дате

Обновлено: 21.11.2024

В этой статье я объясню, как работает очень полезная функция ADD_MONTHS, и приведу несколько примеров.

Назначение функции Oracle ADD_MONTHS

Цель функции Oracle ADD_MONTHS — добавить к дате указанное количество месяцев и вернуть еще один месяц.

Синтаксис

Синтаксис функции ADD_MONTHS:

Эта функция возвращает значение DATE.

Параметры

  • input_date (обязательный): это начальная дата или дата, к которой вы добавите количество месяцев.
  • number_months (обязательный): это целочисленное значение, представляющее количество месяцев, которое нужно добавить к input_date.

Некоторые замечания об этой функции:

  • input_date может быть любым значением DATETIME или значением, которое можно преобразовать в DATE (например, VARCHAR2 в формате даты).
  • число_месяцев может быть любым целым числом или значением, которое можно преобразовать в целое число (например, VARCHAR2 в формате целого числа).
  • Тип возвращаемого значения всегда DATE, даже если тип данных, указанный для input_date, не является DATE.

Что делать, если количество дней отличается?

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

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

Например, добавление 3 месяцев к 31 января даст 30 апреля (поскольку в апреле всего 30 дней).

Существует ли функция Oracle ADD_DAYS, аналогичная ADD_MONTHS?

Однако вы можете легко добавить или вычесть день из даты, просто добавив к ней число.

Например, чтобы добавить 3 дня к сегодняшней дате:

Чтобы вычесть 7 дней из сегодняшней даты:

Для этого не требуется дополнительная функция.

Существует ли функция Oracle ADD_YEARS, подобная ADD_MONTHS?

Нет, в Oracle также нет функции ADD_YEARS.

Хорошей новостью является то, что вы можете использовать ADD_MONTHS с параметром number_months, равным 12, чтобы добавить один год. Вы можете использовать число, кратное 12, чтобы добавить больше лет.

Кроме того, для вычитания лет можно использовать отрицательные числа (например, -12).

Дополнительные сведения см. в разделе "Примеры" ниже.

Может ли Oracle ADD_MONTHS вычесть месяцы?

Да, вы можете вычесть месяцы с помощью функции ADD_MONTHS, просто используя отрицательное число в качестве параметра number_months.

Дополнительные сведения см. в разделе "Примеры" ниже.

Как получить первый день месяца с помощью Oracle ADD_MONTHS?

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

Вы также можете использовать функцию TRUNC отдельно:

Примеры функции Oracle ADD_MONTHS

Вот несколько примеров использования функции ADD_MONTHS. Я считаю, что примеры — лучший способ узнать о коде, даже с объяснением выше.

Пример 1

В этом примере показано, как добавить один месяц к текущей дате.

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/SEP/2015

ADD_MONTH_RESULT показывает, что к дате добавлен один месяц.

Пример 2

В этом примере показано, как добавить шесть месяцев к текущей дате.

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/FEB/2016

Результат – это шесть месяцев, добавленные к текущей дате, то есть 6 февраля 2016 года.

Пример 3

В этом примере показано, как добавить большее количество месяцев.

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/JAN/2019

Результат — январь 2019 года, то есть через 41 месяц.

Пример 4

В этом примере показано, как вычесть месяцы, используя отрицательное число

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/FEB/2015

Результат — февраль 2015 г., то есть за 6 месяцев до SYSDATE.

Пример 5

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

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/JAN/2016

Результатом является январь 2016 года, то есть пять месяцев вперед.

Пример 6

В этом примере показано текстовое значение внутри параметра number_months.

Это потому, что я использовал значение "Шесть", которое на самом деле не является числом.

Пример 7

В этом примере в качестве входной даты используется конкретная дата, а не SYSDATE.

SYSDATE ADD_MONTH_RESULT
08/JUL/2015 08/AUG/2015

Как видите, к указанной дате добавляется один месяц.

Пример 8

В этом примере используется десятичное число в качестве количества добавляемых месяцев.

В обоих случаях значение одинаковое. Это связано с тем, что десятичное значение было округлено до 2, даже если 2,9 обычно округляется до 3.

Пример 9

В этом примере показано, как можно добавить год к дате.

SYSDATE ADD_MONTH_RESULT_LOW ADD_MONTH_RESULT_HIGH
06/AUG /2015 06/OCT/2015 06/OCT/2015
SYSDATE ADD_MONTH_RESULT
06/AUG/2015 06/AUG/2016

Результатом является дата на один год вперед.

Пример 10

В этом примере показано, как найти первый день месяца с помощью функции ADD_MONTHS.

SYSDATE ADD_MONTH_RESULT
06/AUG/2015 01/AUG/2016

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

Похожие функции

    – Усекает дату и время в формате даты.
  • LAST_DAY – возвращает дату последнего дня указанного месяца.

Вы можете найти полный список функций Oracle SQL здесь.

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

Оставить комментарий Отменить ответ

Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.

Вопрос: что мне сделать, чтобы добавить 5 месяцев к столбцу Oracle DATE? Как добавить месяцы в формат даты/времени?

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

выберите add_months(sysdate,5) из двойного;

Вы также можете добавить месяцы из столбца типа даты:

SELECT TO_CHAR(
ADD_MONTHS(hire_date,1),
'DD-MON-YYYY') "5 месяцев"
FROM
emp
WHERE
last_name = 'Берлесон';

Как мы видим, есть несколько способов добавить месяцы в столбец даты Oracle.

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

Бурлесон — американская команда

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

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

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:

и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Как добавить месяцы к значению метки времени в Oracle? В моем запросе вместо этого оно преобразуется в значение даты:

Фактический результат:

Ожидаемый результат:

5 ответов 5

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

Если вам нужна большая или меньшая точность (например, округление), чем указано выше, измените форматы даты (оба формата должны быть одинаковыми). Например, это вернет 2 месяца с точностью до секунд:

Это самое близкое, что я могу получить (как персонаж) к нужному вам формату:

первое утверждение, которое у вас есть, является хитрым, так как оно основано на неявном преобразовании и, в зависимости от настроек NLS, может фактически завершиться ошибкой (или дать неправильную дату).

Да, поскольку TO_TIMESTAMP принимает только символы, а не даты, я удаляю 1ST и оставляю только преобразования с явным форматом даты..

Я думаю, это даст вам то, что вы ищете:

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

Этот запрос возвращает:

Это связано с тем, что он пытается вернуть 31 февраля, что не является допустимой датой.

ADD_MONTHS — это «более безопасный» способ датирования математических данных, поскольку в приведенном выше примере запрос интервала выдаст ошибку, а ADD_MONTHS вернет последнюю дату месяца (28 или 29 февраля в зависимости от года).< /p>

Есть несколько проблем с этим ответом: сначала ADD_MONTHS неявно преобразует TIMESTAMP в DATE, отбрасывая дробные секунды, но сохраняет остальную часть компонента времени, затем вы добавляете интервал между текущим временем и временем, усеченным до начала дня, поэтому вы добавляете компонент времени к метке времени дважды (а доли секунды — только один раз).

Во-вторых, TO_TIMESTAMP( timestampstring, format_model ) использует параметр сеанса NLS_TIMESTAMP_FORMAT в качестве модели формата по умолчанию, но неявное преобразование DATE в строку (поскольку первый аргумент TO_TIMESTAMP является строкой) использует параметр сеанса NLS_DATE_FORMAT, опираясь на неявное преобразование означает, что эти настройки должны быть идентичными, а TIMESTAMP и DATE обычно не имеют одного и того же формата, поэтому для большинства пользователей это не так.

Вы хотите: SELECT CAST( ADD_MONTHS( TRUNC( CURRENT_TIMESTAMP ), 2 ) AS TIMESTAMP ) + ( CURRENT_TIMESTAMP - TRUNC( CURRENT_TIMESTAMP )) AS two_months_from_now FROM DUAL;

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

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

Синтаксис:

  1. init_date — используется для указания начальной даты.
  2. add_months – используется для указания количества месяцев, которое нужно добавить к исходной дате.

Возвращаемое значение:
Функция ADD_MONTHS возвращает значение типа данных даты.

  1. Оракул 12c
  2. Оракул 11 г.
  3. Оракул 10 г
  4. Оракул 9i
  5. Оракул 8i

Пример 1. Использование положительного числового значения в аргументе add_months функции ADD_MONTHS.

Вывод:

Пример 2. Использование отрицательного числового значения в аргументе add_months функции ADD_MONTHS.

Вывод:

Пример 3. Использование отрицательного числового значения в аргументе add_months функции ADD_MONTHS.

Вывод:

Поскольку в апреле 30 дней, ADD_MONTHS возвращает 30.04.18 как последний день.

Пример 4. Использование положительного числового значения в аргументе add_months функции ADD_MONTHS.

Вывод:

Поскольку в ноябре 30 дней, ADD_MONTHS возвращает 30.11.18 как последний день.

Пример 5. Использование запроса на выборку с функцией ADD_MONTHS.

Вывод:

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

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