Перейти к содержимому
Последнее обновление

MAKEDATE

Описание​

Функция MAKEDATE формирует и возвращает дату на основе указанного года и порядкового номера дня в году (dayofyear). Результат вычисляется путём прибавления смещения в днях к первому дню указанного года. Если входное значение превышает общее число дней в году, функция автоматически корректирует дату.

Эта функция работает так же, как функция makedate в MySQL.

Синтаксис​

MAKEDATE(`<year>`, `<day_of_year>`)

Параметры​

ПараметрОписание
yearУказанный год типа INT. Допустимый диапазон: от 0 до 9999.
dayofyearПорядковый номер дня в году (1-366) типа INT.

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

Возвращает значение типа DATE, представляющее дату, вычисленную на основе переданных года и порядкового номера дня в году (формат YYYY-MM-DD).

  • Если <day_of_year> меньше или равно 0, возвращается ошибка.
  • Если <day_of_year> превышает общее число дней в указанном году (365 дней в невисокосном году, 366 дней в високосном), функция автоматически переносит дату на следующий год или более поздние годы (например, 366-й день невисокосного 2021 года будет преобразован в 2022-01-01).
  • Если вычисленная дата выходит за допустимый диапазон (от 0000-01-01 до 9999-12-31), возвращается ошибка.
  • Если какой-либо параметр равен NULL, функция возвращает NULL.

Примеры​

--- Calculate the Nth day of the year (Note: 2021 is a common year with 365 days, and the 365th day is December 31)
SELECT MAKEDATE(2021, 1), MAKEDATE(2021, 100), MAKEDATE(2021, 365);
+-------------------+---------------------+----------------------+
| makedate(2021, 1) | makedate(2021, 100) | makedate(2021, 365) |
+-------------------+---------------------+----------------------+
| 2021-01-01 | 2021-04-10 | 2021-12-31 |
+-------------------+---------------------+----------------------+

--- Leap year handling: 2020 is a leap year (366 days)
SELECT MAKEDATE(2020, 366);
+----------------------+
| makedate(2020, 366) |
+----------------------+
| 2020-12-31 |
+----------------------+

--- Days exceeding the total days of the year are automatically adjusted to the next year
SELECT MAKEDATE(2021, 366), MAKEDATE(2021, 400);
+----------------------+----------------------+
| makedate(2021, 366) | makedate(2021, 400) |
+----------------------+----------------------+
| 2022-01-01 | 2022-02-04 |
+----------------------+----------------------+

--- Non-positive day values return an error
SELECT MAKEDATE(2020, 0);
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]The function makedate Argument value 2020, 0 must larger than zero ,and year between 1 and 9999

--- Parameters are NULL, returns NULL
SELECT MAKEDATE(NULL, 100), MAKEDATE(2023, NULL);
+---------------------+----------------------+
| makedate(NULL, 100) | makedate(2023, NULL) |
+---------------------+----------------------+
| NULL | NULL |
+---------------------+----------------------+

--- Year exceeds the valid range
SELECT MAKEDATE(9999, 366);
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[E-218]Operation makedate of 9999, 366 out of range