Skip to content

add_months(start_date, num_months)

Описание

Функция add_months() добавляет указанное количество месяцев к дате.

Параметры

  • start_date: Column - столбец с датами
  • num_months: Integer - количество месяцев для добавления (может быть отрицательным для вычитания)

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

Date - новая дата после добавления указанного количества месяцев

Пример использования

from pyspark.sql.functions import add_months
from pyspark.sql import SparkSession
from datetime import datetime

# Создаем SparkSession
spark = SparkSession.builder.appName("add_months_example").getOrCreate()

# Создаем DataFrame с датами
data = [
    (datetime(2023, 1, 15),),   # 15 января
    (datetime(2023, 1, 31),),   # 31 января
    (datetime(2023, 12, 31),)   # 31 декабря
]
df = spark.createDataFrame(data, ["date"])

# Добавляем месяцы к датам
result = df.select(
    "date",
    add_months("date", 1).alias("date_plus_1_month"),
    add_months("date", -1).alias("date_minus_1_month")
).show(truncate=False)

# Результат:
# +-------------------+------------------+-------------------+
# |date               |date_plus_1_month |date_minus_1_month |
# +-------------------+------------------+-------------------+
# |2023-01-15 00:00:00|2023-02-15       |2022-12-15        |
# |2023-01-31 00:00:00|2023-02-28       |2022-12-31        |
# |2023-12-31 00:00:00|2024-01-31       |2023-11-30        |
# +-------------------+------------------+-------------------+

Примечания

  • NULL значения возвращают NULL
  • Для вычитания месяцев используйте отрицательное значение параметра num_months
  • Функция учитывает количество дней в месяце:
  • Если исходная дата - последний день месяца, результат также будет последним днем месяца
  • Если в результирующем месяце меньше дней, чем в исходной дате, возвращается последний день месяца
  • Для работы с датами также используйте:
  • date_add() для добавления дней
  • date_sub() для вычитания дней
  • datediff() для вычисления разницы между датами
  • months_between() для вычисления разницы в месяцах
  • year() для извлечения года
  • month() для извлечения месяца
  • day() для извлечения дня